2016-08-04 3 views
0

Я работаю на одностраничном сайте и получил аякс-загрузку шаблонов для вставки в часть содержимого сайта. Тем не менее, у меня возникают проблемы с использованием нескольких шаблонов, используя параметр.Ruby on Rails - модифицирующая часть встроенного Ruby в .js.erb

У меня есть 5 шаблонов, общий/блог, общие/проектов и т.д.

В моем контроллере я делаю вызов AJAX для 'заменить'

pages = ['blog', 'projects', 'resume', 'gallery', 'contact'] 

def replace 
    @content = params[:content] 
    if not pages.include? content 
    content = 'blog' 
    end 
    respond_to do |format| 
    format.js 
    end 
end 

В replace.js. Еврорадио, у меня есть этот код:

$(".content_inner").html("<%= j render(:partial => 'shared/blog') %>"); 

Я держал ее просто говорю «общий/блог», потому что он работает для загрузки блог, если я держу встроенный Ruby, статический подобные. Тем не менее, я не могу понять, как заменить часть блога «shared/blog» здесь на то, что находится в переменной @content. Я пробовал такие вещи, как # {content}, но безрезультатно.

(Он делает получить содержимое переменной правильно, проблема только с помощью его)

Любая помощь будет оценен по достоинству!

Спасибо.

ответ

0

Строчная интерполяция требует двойных кавычек. Вы после того, как:

$(".content_inner").html("<%= j render("shared/#{@content}") %>"); 

Несколько замечаний:

  • :partial => не было необходимости для лет в Rails. Просто используйте render <partial_name>.
  • Rails уже поставляется с местом для хранения ваших общих партиций: app/views/application. Вы должны перенести свои общие части, а затем вы можете сделать их просто с помощью render(@content). Это важно для того, как работает Rails, потому что он позволяет вам переопределять частичные в пути просмотра, специфичные для контроллера. Например, при вызове render("blog") будет отображаться app/views/<controller_name>/blog.js.erb, если он существует, а затем обратно в app/views/application/blog.js.erb.
+0

Большое спасибо! Это сработало! Своего нового для RoR так и не подумал. –