5

我正在构建一个 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被调用了吗?

编辑:更改以反映我的最终答案。

4

2 回答 2

1
@blog = Blog.find(params[:id])

respond_to do |format|
   format.js { render :show_blog }
end

这不是 Rails 的默认逻辑。

你没有提供,如何调用方法,假设

   def show_blog
    @blog = Blog.find(params[:id])
    respond_to do |format|
       format.js 
    end
    end

然后,Rails 将查找show_blog.js.erbviews/blogs渲染该文件。

此外,您需要将实际实例传递给部分,因为 patrial 是独立的代码块并且不知道 @blog 是什么:

$("#contenthere").append("<%=j render :partial=>"show_blog", :locals=>{:@blog=>@blog}%>");
于 2013-06-20T22:00:44.277 回答
0

最后非常简单的解决方案 --- 部分调用 blog.title、blog.user_id,但 @blog 是传递的实际参数。只需更改为@blog.title 和@blog.user_id。

于 2013-06-20T21:23:57.913 回答