评论模型不保存和显示:评论的正文部分

时间:2013-11-18 06:18:06

标签: ruby-on-rails-4 params commenting attr-accessible

我是rails的新手,我遇到了挑战,在我的列表模型中添加了评论系统。实际上,我有用户创建的列表,我希望能够允许其他用户对这些列表发表评论。

到目前为止我所拥有的:

列表模型包括:

has_many :comments

评论模型包括:

belongs_to :listing

评论控制员:

class CommentsController < ApplicationController

def create

  @listing = Listing.find(params[:listing_id])

  @comment = @listing.comments.build(params[:body]) # ***I suspected that I needed to pass :comment as the params, but this throws an error.  I can only get it to pass with :body ***

 respond_to do |format|

  if @comment.save

    format.html { redirect_to @listing, notice: "Comment was successfully created" }

    format.json { render json: @listing, status: :created, location: @comment }

  else

    format.html { render action: "new" }

    format.json { render json: @comment.errors, status: :unprocessable_entity }

   end
  end
 end
end


def comment_params
   params.require(:comment).permit(:body, :listing_id)
end

最后是一个列表视图,其中包含以下用于收集和显示注释的代码:

       <div class="form-group">
          <%= form_for [@listing, Comment.new] do |f| %>
          <%= f.label :comments %>
          <%= f.text_area :body, :placeholder => "Tell us what you think", class: "form-control", :rows => "3" %>
          <p><%= f.submit "Add comment", class: "btn btn-primary" %></p>
          <% end %>
        </div>

      <%= simple_form_for [@listing, Comment.new] do |f| %>
      <p>
        <%= f.input :body, :label => "New comment", as: :text, input_html: { rows: "3" } %>
      </p>
      <p><%= f.submit "Add comment", class: "btn btn-primary" %></p>
      <% end %>

评论框在视图中正确显示,我可以提交评论,但是看起来:正文没有被保存,因此“提交x分钟前”是唯一显示的内容在我的评论部分。

关于我可能做错的任何想法?我怀疑这是一个params问题,但还是无法解决。

谢谢!

1 个答案:

答案 0 :(得分:1)

由于您在Rails 4中使用了strong_parameters范例,我认为您应该将注释创建行更改为:

 @comment = @listing.comments.build(comment_params)

我会将列表发现行更改为:

 @listing = Listing.find(params.permit(:listing_id))

只要您在comment_params方法中将所有必需参数正确列入白名单,它就可以正常工作。