注释表单显示空白注释,即使数据库为空,rails

时间:2015-04-12 01:25:18

标签: ruby-on-rails ruby-on-rails-4

我正在我的博客上构建一个评论部分,到目前为止,我已经将它工作到能够成功提交评论并让它们出现在我的页面上。

但是,无论我有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>语句运行。

3 个答案:

答案 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语句并删除页面上的新记录。