我正在做导轨教程,而我只是将评论模型与我的文章模型相关联。
我有一个视图文件,在这里显示一篇文章及其所有评论(app / views / articles / show.html.erb):
<p>
<strong>Title:</strong>
<%= @article.title %>
</p>
<p>
<strong>Text:</strong>
<%= @article.body %>
</p>
<h2>Comments</h2>
<% @article.comments.each do |comment| %>
<p>
<strong>Commenter:</strong>
<%= comment.commenter %>
</p>
<p>
<strong>Body:</strong>
<%= comment.body %>
</p>
<% end %>
<h2>Add a comment:</h2>
<%= form_for([@article, @article.comments.build]) do |comment| %>
<p>
<%= comment.label :commenter %>
<%= comment.text_field :commenter %>
</p>
<p>
<%= comment.label :body %>
<%= comment.text_area :body %>
</p>
<p>
<%= comment.submit %>
</p>
<% end %>
代码排列如下 - 添加评论表单上方显示的评论 - 浏览器中的所有内容都显示正常
但是,当我重新排列以在评论部分上方添加评论表时,如下所示:
<p>
<strong>Title:</strong>
<%= @article.title %>
</p>
<p>
<strong>Text:</strong>
<%= @article.body %>
</p>
<h2>Add a comment:</h2>
<%= form_for([@article, @article.comments.build]) do |comment| %>
<p>
<%= comment.label :commenter %>
<%= comment.text_field :commenter %>
</p>
<p>
<%= comment.label :body %>
<%= comment.text_area :body %>
</p>
<p>
<%= comment.submit %>
</p>
<% end %>
<h2>Comments</h2>
<% @article.comments.each do |comment| %>
<p>
<strong>Commenter:</strong>
<%= comment.commenter %>
</p>
<p>
<strong>Body:</strong>
<%= comment.body %>
</p>
<% end %>
我在页面底部留下了一个标有评论者和正文的html元素,但其中没有任何内容。例如,如果我在文章上发表了一次评论,那么它会显示预期评论,还会在其下方添加一条空白评论。在最初的代码安排中,没有额外的空白评论,只有我在文章中写的单一预期评论。
为什么重新排列这样的文字会在底部添加空白评论?
我的文章控制器显示行动:
def show
@article = Article.find(params[:id])
end
我的评论控制器创建动作:
def create
@article = Article.find(params[:article_id])
@comment = @article.comments.create(comment_params)
redirect_to article_path(@article)
end
答案 0 :(得分:0)
一旦你这样做了(你在表格中做了什么)
@article.comments.build
它初始化对@article
的评论,然后当您尝试获取表格中下面文章的评论时,也会显示该相关评论。你要做的是,用这个
<% @article.comments.select(&:persisted?).each do |comment| %>
<p>
<strong>Commenter:</strong>
<%= comment.commenter %>
</p>
<p>
<strong>Body:</strong>
<%= comment.body %>
</p>
<% end %>
主线变化是这个
<% @article.comments.select(&:persisted?).each do |comment| %>
这将仅选择该文章的数据库中存在的那些评论