问题在于回复,每次我提交回复时都会有新的回复,并且会创建评论。 这是我的评论控制器
def new
@comment = Comment.new
end
def create
@post = Post.find(params[:post_id])
if params[:parent_id].present?
@comment = Comment.find(params[:parent_id]).replies.new.(comment_params)
elsif params[:parent_id].blank?
@comment = @post.comments.new(comment_params)
@comment.user = current_user
end
if @comment.save
flash[:success] = 'Your comment was successfully added!'
redirect_to :back
else
render 'new'
end
end
def destroy
@comment = Comment.find(params[:id])
@comment.destroy
if @comment.destroy
redirect_to :back
end
end
private
def comment_params
params.require(:comment).permit(:body, :parent_id)
end
end
和 在我的_comment.html.erb
中<%= render comment.replies if comment.replies.any? %>
<%= form_for [comment.post, comment.replies.new] do |f| %>
<%= f.hidden_field :parent_id, :value => comment.id %>
<%= f.text_field :body %>
<%= f.submit 'reply', name: 'reply' %>
<% end %>
在我的模特中
belongs_to :parent, class_name: "Comment"
has_many :replies, class_name: "Comment", foreign_key: :parent_id, dependent: :destroy
提交回复时,会传递一个参数[:parent_id]。 问题 If-Else语句不起作用,我需要知道是否提交了评论或回复。 如果它确实有效,我不知道如何得到我正在创建回复的评论。 希望一切都清楚,谢谢。
答案 0 :(得分:1)
基于您的表单parent_id
即将发表评论参数,所以它应该是这样的
@post = Post.find(params[:post_id])
if params[:comment][:parent_id].present?
@comment = Comment.find(params[:parent_id]).replies.new.(comment_params)
elsif params[:comment][:parent_id].blank?
@comment = @post.comments.new(comment_params)
@comment.user = current_user
end
希望它有所帮助!