使用Rails中的祖先宝石回复评论不起作用

时间:2018-07-13 13:20:14

标签: ruby-on-rails nested-forms ruby-on-rails-5.1 ancestry

我正在尝试使用 Rails 5.1.6

创建“ 从帖子回复评论系统

我正在使用Ancestry Gem

我遵循Railscasts #262作为指导。

我对此有疑问,

  

当我对每个评论提交答复时,它变成了新评论。不是   回复评论。

我做了railscast在他的表单内所做的

<% form_for @message do|f| %>(在我的情况下是@comment),

但是我收到此错误未定义方法`comments_path'

所以,我这些代码:

<%= simple_form_for [@post, @comment]  do |f| %>
  <%= f.hidden_field :parent_id %>
  <%= f.text_area :body %>
<% end %>

<%= simple_form_for [@post, Comment.new]  do |f| %>
  <%= f.hidden_field :parent_id %>
  <%= f.text_area :body %>
<% end %>

<%= simple_form_for [:post, Comment.new]  do |f| %>
  <%= f.hidden_field :parent_id %>
  <%= f.text_area :body %>
<% end %>

但是所有这些代码都会生成一个新的注释,而不是答复。

这是我的另一个代码: comments_controller

def create
    @comment = @post.comments.new(comment_params)
    @comment.user = current_user

    respond_to do |format|
      if @comment.save
        format.html { redirect_to @post, notice: 'Comment was successfully created.' }
        format.json { render json: @comment, status: :created, location: @comment }
      else
        format.html { render action: "new" }
        format.json { render json: @comment.errors, status: :unprocessable_entity }
      end
    end
  end

  def new
    @comment = Comment.new(:parent_id => params[:parent_id])
  end

发布模型

has_many :comments

评论模型

 has_ancestry
  belongs_to :post

观看次数/帖子/显示

观看次数/评论/ _评论

<%= div_for(comment) do %>
  <%= comment.body %>
  <%= link_to "Reply", new_post_comment_path(:parent_id => comment, :post_id => @post) %>
<% end %>

路线

resources :posts do
    resources :comments, only: [:destroy, :new, :create]
end

耙路

post_comments POST     /:post_id/comments(.:format)            comments#create
        new_post_comment GET      /:post_id/comments/new(.:format)        comments#new
            post_comment DELETE   /:post_id/comments/:id(.:format)        comments#destroy

请问有人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

最后我找到了答案。

我将:parent_id放在comment_params

  def comment_params
    params.require(:comment).permit(:post_id, :body, :user_id, :parent_id)
  end