Ruby on rails 渲染';属于;索引视图中的问题-RubyonRails
我用RubyonRails创建了一个简单的博客应用程序。应用程序由两个表组成,即帖子和评论。评论Ruby on rails 渲染';属于;索引视图中的问题-RubyonRails,ruby-on-rails,ruby,Ruby On Rails,Ruby,我用RubyonRails创建了一个简单的博客应用程序。应用程序由两个表组成,即帖子和评论。评论属于:post,而posts有很多:评论 我用以下列创建了posts表:标题:string,正文:text。 我用以下列创建了注释表:body:textpost\u id:integer名称:string电子邮件:string 在/views/comments/index.html.erb显示中,我想显示所有评论的列表,以及文章标题。目前,“索引”视图仅显示帖子id、正文、姓名和电子邮件 如何用相应的
属于:post
,而posts有很多:评论
我用以下列创建了posts表:标题:string
,正文:text
。
我用以下列创建了注释表:body:text
post\u id:integer
名称:string
电子邮件:string
在/views/comments/index.html.erb显示中,我想显示所有评论的列表,以及文章标题。目前,“索引”视图仅显示帖子id、正文、姓名和电子邮件
如何用相应的帖子标题替换帖子id列?这是我的密码:
CommentsController索引操作:
def index
@comments = Comment.all :order => "created_at DESC"
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @comments }
format.json { render :json => @comments }
format.atom
end
end
/views/comments/index.html.erb
<h1>Listing comments</h1>
<table>
<tr>
<th>Post</th>
<th>Body</th>
</tr>
<% @comments.each do |comment| %>
<tr>
<td><%=h comment.post_id %></td>
<td><%=h comment.body %></td>
<td><%=h comment.name %></td>
<td><%=h comment.email %></td>
</tr>
<% end %>
</table>
<br />
列出注释
邮递
身体
您只需执行
即可输出与评论相关联的帖子标题。如果您有100条评论,请使用评论。与您的代码一起使用post.title
将导致101查询!请参阅本文档页面上的部分。此处的快速加载将使其减少到2
def index
@comments = Comment.find(:all, :include => :post, :order => "created_at DESC")
# ...
end
在您的视图中,您可以按以下方式访问文章标题:
<%= comment.post.title rescue "No post" %>
编辑:我正在使用
rescue“No Post”
,因为你有一些Post\u id
=nil
的评论,还有一些Post\u id
的评论指向不再存在的帖子。试试@Post.comment.title。因为帖子有很多评论属于Post,然后是一种父子关系。当我这样做时,我得到以下错误:未定义的方法'posts'for#。我是否还必须在CommentsController索引操作中设置一些内容?您是否尝试过comment.post.title
(单数)或comment.posts.title
?后者不起作用。你做了comment.post.title
?注意单数post。我想你键入了comment.psots.title
。单数,就像你键入的一样。当我在comment.post.whatever之后添加任何内容时遇到相同的问题。但是,当我把它呈现在posts表中的实际post id记录时(大概是这样),即#因此,当我添加时,我得到一个错误,即“title”是一个未定义的方法。如果我改为body,我会得到与body相同的“undefined method”错误。只有当我将其保留为在posts表中呈现实际的post id记录时,它似乎才“连接”到post信息(假定为),即#。我仍然收到一个错误,表示:nil:NilClass的未定义方法“title”。有什么想法吗?@bgadoci,试着在你的终端上运行script/console
。Doc=Comment.find(1)
后跟c.post.inspect
。你看到了什么?好的,第一个命令返回这个:#第二个命令返回“nil”。因为第一个注释可能是在我设置好所有内容之前,我运行了c=comment.find(25),它返回了这个:#,然后在第二个请求中再次返回“nil”。c=Post.find(6)返回:ActiveRecord::RecordNotFound:找不到ID=6的Post。