Ruby on rails 奇怪的行为 背景
当我遇到由Ruby on rails 奇怪的行为 背景,ruby-on-rails,ruby-on-rails-4,renderpartial,Ruby On Rails,Ruby On Rails 4,Renderpartial,当我遇到由build 所以在指南里我写了一个博客,在那里帖子有评论部分。在指南中,他们将发布的评论显示在评论表单之前,用于添加新评论。不知何故,我想尝试另一种方法(首先是评论表单)。然而,当我这样做时,额外的空标记被呈现出来 起初,我认为它是从模型中呈现一个空注释,但在运行之后 <%= @article.comments.count %> # => 2 gives expected comments count 当使用建议的解决方案Comment.new时,所有方法都返回1,
build
所以在指南里我写了一个博客,在那里帖子有评论部分。在指南中,他们将发布的评论显示在评论表单之前,用于添加新评论。不知何故,我想尝试另一种方法(首先是评论表单)。然而,当我这样做时,额外的空标记被呈现出来
起初,我认为它是从模型中呈现一个空注释,但在运行之后
<%= @article.comments.count %> # => 2 gives expected comments count
当使用建议的解决方案Comment.new
时,所有方法都返回1,这与
编辑
更明确地陈述问题增加了答案/讨论摘要
<%= form_for([@article, @article.comments.build]) do |f| %>
要避开这个问题,您需要创建一个注释
,但不要将其与集合相关联。使用Comment.new
而不是@article.comments.build
应该足够了,因为记录本身并不重要
请注意,之所以看到正确数量的注释(
@article.comments.count
)是因为通过build
创建的注释尚未保存到数据库,并且无论集合是否已加载,#count
始终执行count
查询。您可以使用#size
来查看额外的注释(@article.comments.size
)。问题是,您的注释表单部分调用了@article.comments.build
,这除了构造新的注释实例外,还将此实例添加到集合中。这就是为什么你会看到额外的评论。尝试改用@article.comments.new
另见:
编辑
我刚刚发现自从Rails>3.2.13以来,
.new
方法已经改变。既然您已经用Rails-4为您的帖子添加了标签,那么我提出的解决方案就行不通了。取而代之的是,试着按照建议使用@article.comments.scoped.new
。额外的标签仍然会出现。@madsonic你可以试着只使用Comment.new
?
这样吗?@madsonicform_for([@article,Comment.new])
-注意注释的单数形式,它是模型的名称。还对答案进行了一点扩展,以解释显示的记录数“不正确”。这很有效!关于count
vssize
,我可以说count
统计所有实例,不管它们是否被保存,而size
只统计数据库中的实例吗?我相信在rails 4中不推荐使用范围
<h4>
<%= comment.commenter %>
</h4>
<p>
<%= comment.body %>
</p>
<%= form_for([@article, @article.comments.build]) do |f| %>
<p class="commenter">
<%= f.label :commenter %><br>
<%= f.text_field :commenter %>
</p>
<p class="text">
<%= f.label :body %><br>
<%= f.text_area :body %>
</p>
<p>
<%= f.submit %>
</p>
<% end %>
#when .build was used
<%= @article.comments.length %> # => 2
<%= @article.comments.count %> # => 1
<%= @article.comments.size %> # => 2
<%= form_for([@article, @article.comments.build]) do |f| %>
<%= form_for([@article, @article.comments.build(commenter: "Hello!")]) do |f| %>