Ruby on Rails - 在.js.erb

时间:2016-08-04 18:43:57

标签: javascript ruby-on-rails ruby ajax web

我正在单页网站上工作,并且已经将模板的ajax加载插入到网站的内容部分中。但是,我使用参数在使用多个模板时遇到了麻烦。

我有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.erb中,我有这段代码:

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

我一直只是说'分享/博客&#39;因为如果我像这样保持嵌入式Ruby静态,它适用于加载博客。但是,我无法弄清楚如何更换博客&#39; “共享/博客”的一部分在这里@content变量中的任何内容。我尝试了#{content}之类的东西,但无济于事。

(它确实正确接收内容变量,问题就在于使用它)

任何帮助将不胜感激!

感谢。

1 个答案:

答案 0 :(得分:0)

字符串插值需要双引号。你在追求:

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

一些注意事项:

  • Rails中不需要:partial =>。只需使用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,否则将回退到h5py