【问题标题】:How to get to missing required keys: [:post_id] in nested comments?如何获得缺少必需的键:嵌套评论中的 [:post_id]?
【发布时间】:2016-03-10 21:40:42
【问题描述】:

我有组显示页面,其中应该是帖子及其相应的评论。我的模型是:

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

在我看来,我在组/显示页面上显示所有内容,因此我只使用创建和销毁帖子和 cmets 的路线:

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

我的控制器看起来像:

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

在组/显示页面上,我想要组描述和帖子列表及其 cmets。没有 cmets 一切正常。但是在创建 cmets 时,我无法处理如何识别我希望在其下创建此类评论的相应帖子的 post_id。我的 cmets 表单如下所示:

<%= 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 %>

唯一可访问的 id 是 group_id,因为我使用它的显示页面,但是如何获取 post_id?

【问题讨论】:

  • 您在呈现帖子列表的页面上是否有相同的页面,它是 cmets?您如何将 cmets 发布到特定/单个帖子?
  • 是的,这就是想要完成的,但不知道如何。它应该很像这里的答案/帖子列表和 cmets 列表下方。
  • 因为你循环了所有的帖子数据和相关的 cmets(比如 2 次迭代)[first posts.each do |post| >> 接下来是 post.cmets 做的]。如果你有这个过程,可能你会得到正确的 cmets 的 post_id。
  • 在页面组/显示我有两个表格,一个是新帖子,每个帖子下面是新评论表格。问题是我无法创建新评论,因为它找不到应该在其下创建它的相应帖子(resp.post_id)。
  • 你有没有试过把post_id放到post_cmets_path(:post_id => @post.id)这样的表单路径中,然后在Controller中捕获参数。

标签: ruby-on-rails-4 params


【解决方案1】:

终于找到了解决办法。拆开零件后,我发现 post_id 在那里,但实际上 group_id 不见了。问题是在创建评论时 post_id 和 group_id 都是必需的,但由于 cmets 是嵌套的,我无法访问 group_id。解决方法很简单:

class CommentsController < ApplicationController
 def create
  @comment = current_user.comments.build(comment_params)
  @post = Post.find(params[:post_id])
  @group = @post.group

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-09
    • 1970-01-01
    • 2013-04-09
    • 1970-01-01
    • 2021-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多