我用Ruby on Rails创建了一个简单的博客应用程序。应用程序包含两个表,帖子和注释。评论belongs_to :post
和帖子has_many :comments
。
我使用以下列创建了帖子表:title:string
,body:text
。
我使用以下列创建了评论表:body:text
post_id:integer
name:string
email:string
在/views/comments/index.html.erb显示中,我想显示所有评论的列表以及帖子标题。目前,索引视图仅显示post_id,正文,名称,电子邮件。
如何将post_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 />
答案 0 :(得分:1)
如果您有100条评论,则使用comments.post.title
代码会导致 101 查询!请参阅此文档页面上的Eager loading部分。在这里急切加载会将其减少到 2 。
def index
@comments = Comment.find(:all, :include => :post, :order => "created_at DESC")
# ...
end
在您的观看中,您可以访问帖子标题
<%= comment.post.title rescue "No post" %>
修改:我正在使用rescue "No Post"
,因为您对post_id
= nil
发表了一些评论,并且post_id
的一些评论指向{{1}}不再存在的帖子。
答案 1 :(得分:0)
您只需执行<%=h comment.post.title %>
即可输出与评论相关联的帖子的标题。
答案 2 :(得分:0)
试试@ post.comment.title。因为帖子有很多评论属于帖子,那么就是一种父母的孩子关系。