Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 渲染';属于;索引视图中的问题-RubyonRails_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 渲染';属于;索引视图中的问题-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、正文、姓名和电子邮件 如何用相应的

我用RubyonRails创建了一个简单的博客应用程序。应用程序由两个表组成,即帖子和评论。评论
属于: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
。Do
c=Comment.find(1)
后跟
c.post.inspect
。你看到了什么?好的,第一个命令返回这个:#第二个命令返回“nil”。因为第一个注释可能是在我设置好所有内容之前,我运行了c=comment.find(25),它返回了这个:#,然后在第二个请求中再次返回“nil”。c=Post.find(6)返回:ActiveRecord::RecordNotFound:找不到ID=6的Post。