我正在我的博客上构建一个评论部分,到目前为止,我已经将它工作到能够成功提交评论并让它们出现在我的页面上。
但是,无论我有10条评论还是数据库为空,页面上总会有空白评论。
*** views/artist/lyrics/show.html.erb ***
<%= form_for(@lyric.comments.build, url: artist_album_lyric_comments_path(@artist, @album, @lyric)) do |f| %>
<%= f.text_area :content %>
<%= f.submit "comment" %>
<% end %>
<% if @lyric.comments.any? %>
<% @lyric.comments.each do |comment| %>
<%= comment.username %>
<%= comment.content %>
<% end %>
<% else %>
No one has commented.
<% end %>
*** /controllers/users/comments_controller.rb ***
def create
@comment = Comment.new(comment_params)
@comment.user_id = current_user.id
@comment.username = current_user.username
@comment.lyric_id = Lyric.friendly.find(params[:lyric_id]).id
if @comment.save
redirect_to (:back)
else
redirect_to root_url
end
end
评论模型是嵌套的,我认为这与它有关。这是Artist
=&gt; Album
=&gt; Lyric
=&gt; Comment
当我从页面中删除评论表单时,空白评论消失,<else>
语句运行。
答案 0 :(得分:0)
在form_for
标记中,您正在comment
上构建@lyric
。我相信当你立即致电@lyric.comments
时会出现这种情况。尝试:
<% @lyric.comments[0..-2].each do |comment| %>
这将抓住从第一个到第二个到最后一个的所有comments
(基本上所有这些除了刚刚创建的新的一个)。
编辑:
同时将<% if @lyric.comments.any? %>
更改为<% if @lyric.comments.any? && !@lyric.comments[0].new_record? %>
答案 1 :(得分:0)
之前我在代码中使用了这个。试试这个:
<% @lyric.comments.each do |comment| %>
<% next if comment.new_record? %>
<%= comment.username %>
<%= comment.content %>
<% end %>
答案 2 :(得分:0)
我更改了这一行:
<%= form_for(@lyric.comments.build, url: artist_album_lyric_comments_path(@artist, @album, @lyric)) do |f| %>
为:
<%= form_for(Comment.new, url: artist_album_lyric_comments_path(@artist, @album, @lyric)) do |f| %>
它运行else语句并删除页面上的新记录。