Rails多个嵌套表单问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rails多个嵌套表单问题相关的知识,希望对你有一定的参考价值。

我有一个模型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"}
答案

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

def new
  @comment = @post.comments.build
end

以上是关于Rails多个嵌套表单问题的主要内容,如果未能解决你的问题,请参考以下文章

通过复选框Rails 4添加多个嵌套属性(可能有多种形式)

Rails 6嵌套形式茧不会保存子对象

jQuery触发嵌套表单rails cocoon上的所有实例

发生错误时如何在嵌套模型中填充表单?

嵌套表单 gem 和 jquery 的 Rails 问题

如何处理 Rails 中的嵌套表单?