我是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 %>
评论框在视图中正确显示,我可以提交评论,但是似乎 :body 没有被保存,因此"x 分钟前提交"是我评论部分显示的唯一内容。
关于我可能做错了什么的任何想法?我怀疑这是一个参数问题,但无法解决。
谢谢!
由于您在 Rails 4 中使用了strong_parameters范式,我认为您应该将注释创建行更改为:
@comment = @listing.comments.build(comment_params)
我会将列表查找行更改为:
@listing = Listing.find(params.permit(:listing_id))
只要您正确地将comment_params
方法中所有必需的参数列入白名单,它应该可以正常工作。