如何修复评论系统以创建多个评论? - Rails

时间:2016-04-22 17:51:02

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

问题在于回复,每次我提交回复时都会有新的回复,并且会创建评论。 这是我的评论控制器

  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语句不起作用,我需要知道是否提交了评论或回复。 如果它确实有效,我不知道如何得到我正在创建回复的评论。 希望一切都清楚,谢谢。

1 个答案:

答案 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

希望它有所帮助!