Rails AR记录包括' new'未保存的记录

时间:2015-06-24 05:33:54

标签: ruby-on-rails activerecord

我对一篇文章有​​一个观点'展示行动。

文章有评论。

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

我的控制器动作是:

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

视图使用部分显示注释。

<%= render @comments %>

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

<% if !comment.new_record? %>
  ...
<% end %>

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

1 个答案:

答案 0 :(得分:1)

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

因此,@comment = @comments.new代替@comment = Comment.new @comment。然后,在article_id的表单中,您将为<%= f.hidden_field :article_id, :value => @article.id %> 添加一个字段。

Comment.create

这样您就可以在{{1}}操作中保持关系。