我是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问题,但还是无法解决。
谢谢!
答案 0 :(得分:1)
由于您在Rails 4中使用了strong_parameters范例,我认为您应该将注释创建行更改为:
@comment = @listing.comments.build(comment_params)
我会将列表发现行更改为:
@listing = Listing.find(params.permit(:listing_id))
只要您在comment_params
方法中将所有必需参数正确列入白名单,它就可以正常工作。