我对一篇文章有一个观点'展示行动。
文章有评论。
视图显示: 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 %>
我这样做错了还是预期的行为?
答案 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}}操作中保持关系。