【发布时间】: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中捕获参数。