我有一个模型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