【发布时间】:2013-06-20 20:20:47
【问题描述】:
我正在构建一个 Web 应用,它的 UI 分为两侧、一个菜单栏和一个内容区域。 菜单栏列出了用户撰写的所有博客的标题。单击标题时,内容区域应更改以显示该博客的帖子。
1.) 所以在我的菜单栏上,我有:
<%= link_to blog.title, blog, :remote=>true %>
在我的内容区,我有:
<div id="contenthere"></div>
2.) 所以据我了解,这应该会触发博客控制器的 show 方法。在那里,我在方法中有以下内容:
@blog = Blog.find(params[:id])
respond_to do |format|
format.js { render :show_blog }
end
3.) 应该在views/blogs 文件夹中查找名为show_blog.js.erb 的文件:
$("#contenthere").html("<%=escape_javascript(render :partial=>"show_blog")%>");
这将使用我的 div 和 commenthere id 并呈现 _show_blog.html.erb 部分(位于博客视图文件夹中),其 blog 参数等于在我的博客控制器中设置的 @blog 参数。
4.) 所以我的节目博客部分有这个代码:
<%=@blog.title %>
<%=@blog.user_id %>
编辑:实际上,我四处搜索,发现我不能使用资产文件夹中的“渲染”方法——那我应该把 js.erb 放在哪里?我已将其移至博客视图文件夹、主视图文件夹 (index.html.erb) 和仅 /view/ 文件夹...错误消失了,但链接不起作用...
编辑:将 show_blog.js.erb 放在我的视图/博客文件夹中,因为它是博客控制器调用它。当我单击链接并且控制台中没有显示 JS 错误时,什么也没有发生。 js是否被调用?
编辑:更改以反映我的最终答案。
【问题讨论】:
-
你试过了吗:
$("#contenthere").html("<%= render('show_blog', :blog=>@blog) %>");去掉j(...) -
你应该使用
escape_javascript(render..)而不是j(render...)知道错误是来自渲染部分还是来自控制器也很有价值。尝试render 'show_blog'(如果它位于与控制器同名的目录中)而不是使用符号 -
其实我发现是因为assets文件夹不能调用render...我要把show_blog.js.erb文件移到哪个文件夹?
-
它进入views/nameofcontroller,或者views/anything,但是在第二种情况下你必须使用render 'anything/show_blog'
-
检查是否有任何JS错误。
标签: ruby-on-rails partial-views