Rails多个嵌套表单问题

问题描述 投票:0回答:1

我有一个模型Comment belongs_to :post和Post模型反过来belongs_to :group所以基本上我想要一个小组有帖子和帖子允许评论。我遇到了一个问题,试图弄清楚如何嵌套这样的3个级别。

在我的评论控制器中我会做这样的事情吗?

      before_action :set_group, only: [:index, :show, :new, :edit, :create, :update]
      before_action :set_post, only: [:index, :show, :new, :edit, :create, :update]
      before_action :set_comment, only: [:show, :edit, :update, :destroy]

      def new
        @comment = @group.posts.comments.new
      end

    private
    # Use callbacks to share common setup or constraints between actions.
    def set_comment
      @comment = Comment.find(params[:id])
    end

    def set_post
      @post = Post.find(params[:post_id])
    end

    def set_group
      @group = Group.find(params[:group_id])
    end

    # Never trust parameters from the scary internet, only allow the white list through.
    def comment_params
      params.require(:comment).permit(:content, :post_id, :user_id)
    end

如果我将这个添加到我的Post模型中,我正在阅读accepts_nested_attributes_for?还是我的集团模特?

我得到的错误是`

NoMethodError in CommentsController#new
undefined method `comments' for #<Post::ActiveRecord_Associations_CollectionProxy:0x007f2d26044020>`

它虽然传递了组和帖子的参数。

Request

Parameters:

{"group_id"=>"25", "post_id"=>"8"}
ruby-on-rails ruby-on-rails-5
1个回答
1
投票

你不能写@group.posts.comments因为@ group.posts不是1帖子。这是一个协会(很多帖子)。但是,在新方法中,您已经加载了帖子。所以你可以:

def new
  @comment = @post.comments.build
end
© www.soinside.com 2019 - 2024. All rights reserved.