2016-08-04 63 views
0

我正在单页面网站上工作,并且已经获得ajax加载的模板以插入到正在工作的网站的内容部分。但是,使用参数在多个模板中执行此操作时遇到问题。Ruby on Rails - 在.js.erb中修改嵌入式Ruby的一部分

我有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') %>"); 

我一直只是说“共享/博客”,因为它适用于装载博客,如果我把嵌入的Ruby静态这样。但是,我无法弄清楚如何将'shared'/ blog'的'blog'部分替换为@content变量中的任何内容。我试过#{content}之类的东西,但无济于事。

(它确实正确地接收内容的变量,这个问题就是使用它)

任何帮助,将不胜感激!

谢谢。

回答

0

字符串插值需要双引号。你是后:

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

的几个注意事项:

  • :partial =>一直没有必要 Rails中。只需使用render <partial_name>即可。
  • 导轨已经有一个地方来存储您的共享部分:app/views/application。您应该将共享的分部移动到那里,然后您可以简单地使用render(@content)来渲染它们。这对于Rails是如何工作很重要,因为它允许您覆盖控制器特定视图路径中的部分内容。例如,如果它存在,则调用render("blog")将呈现app/views/<controller_name>/blog.js.erb,否则将回退到app/views/application/blog.js.erb
+0

非常感谢!这工作!有点新来RoR所以不认为这样做。 –