Rails AR记录包括“新的”未保存记录

我有一个’文章’节目动作的观点。

文章有评论。

视图显示:a)文章b)评论c)新评论表

我的控制器的动作是:

def show @article = Article.find(params[:id]) @comments = @article.comments @comment = @comments.new end 

视图使用partial显示注释。

  

循环通过@comments时,我发现列表中还包含来自控制器操作的新记录。 我可以避免使用以下方法显示此行:

  ...  

我这样做错了还是预期的行为?

是的,因为您创建新Comment是预期的。 在视图中渲染它们之前,您基本上是在@article.comments添加一个新的空Comment 。 你的解决方案是有道理的,但你也可以通过@article分配给你的控制器show动作中的新@comment来避免这个问题。

所以不要使用@comment = @comments.new而是@comment = Comment.new 。 然后,在@comment的表单中,您将为article_id添加一个字段。

 <%= f.hidden_field :article_id, :value => @article.id %> 

这将允许您在Comment.create操作中维护关系。