Ruby on rails 4 如何获得嵌套注释中缺少的必需键:[:post_id]?

Ruby on rails 4 如何获得嵌套注释中缺少的必需键:[:post_id]?,ruby-on-rails-4,params,Ruby On Rails 4,Params,我有组显示页面上应该是帖子和他们相应的评论。我的模型是: class Group < ActiveRecord::Base belongs_to :user has_many :posts class Post < ActiveRecord::Base belongs_to :group belongs_to :user has_many :comments class Comment < ActiveRecord::Base belongs_to :user belong

我有组显示页面上应该是帖子和他们相应的评论。我的模型是:

class Group < ActiveRecord::Base
belongs_to :user
has_many :posts

class Post < ActiveRecord::Base
belongs_to :group
belongs_to :user
has_many :comments

class Comment < ActiveRecord::Base
belongs_to :user
belongs_to :post
我的控制器看起来像:

class GroupsController < ApplicationController
def show
 @group = Group.find(params[:id])
 @posts = @group.posts.paginate(page: params[:page])
 @post = current_user.posts.build if user_signed_in?
 @comment = current_user.comments.build if user_signed_in?
end

class PostsController < ApplicationController
def create
 @post = current_user.posts.build(post_params)
 @group = Group.find(params[:group_id])
 if @post.save
   @group.posts << @post
   flash[:success] = "Post created!"
   redirect_to group_path(@group)
 else
   @posts = @group.posts.paginate(page: params[:page])
   @users = @group.users
   render 'groups/show'
 end
end

class CommentsController < ApplicationController
def create
 @comment = current_user.comments.build(comment_params)
 @post = Post.find(params[:post_id])
 @group = Group.find(params[:group_id])
 if @comment.save
  @post.comments << @comment
  flash[:success] = "comment created!"
  redirect_to group_path(@group)
 else
  @posts = @group.posts.paginate(page: params[:page])
  @users = @group.users
  render 'groups/show'
 end
end
类组控制器@组最终找到了解决方案。在分解到零件后,我发现post_id在那里,但实际上group_id不见了。问题是在创建注释时,post_id和group_id都是必需的,但由于注释是嵌套的,我无法访问group_id。解决方案非常简单:

class CommentsController < ApplicationController
 def create
  @comment = current_user.comments.build(comment_params)
  @post = Post.find(params[:post_id])
  @group = @post.group
class CommentsController
您是否在同一页面上呈现帖子列表及其评论?你如何将评论发布到特定/单个帖子?是的,这是你想要完成的,但不知道如何完成。这应该很像这里的答案/帖子列表和下面的评论列表。因为你循环了所有帖子数据和相关评论(比如2次迭代)[第一篇帖子。每个帖子| post |>>下一篇是post.comments do]。如果你有这个过程,你可能会得到正确的评论帖子id。在页面组/显示我有两个表单,一个是新帖子的表单,每个帖子下面是新评论的表单。问题是我无法创建新注释,因为它找不到相应的post(resp.post\u id),应该在其下创建它。您是否尝试将post\u id放入类似post\u comments\u path(:post\u id=>@post.id)的表单路径中,然后在控制器中捕获参数。
<%= simple_form_for @comment, uri: post_comments_path do |f| %>
<%= render 'shared/error_messages', object: f.object %>
<%= hidden_field_tag :post_id, @post.id %>
 <%= f.input :content,label: false, placeholder: "add comment", error: false %>
 <%= f.button :submit, "Comment", class: 'btn-primary' %>
<% end %>
class CommentsController < ApplicationController
 def create
  @comment = current_user.comments.build(comment_params)
  @post = Post.find(params[:post_id])
  @group = @post.group