0

我对 Ruby on Rails 还很陌生。我已经建立了一个基本的用户/帖子模型,它允许用户创建帖子。我正在尝试为帖子创建评论,这也会将评论与创建它的用户相关联。

我已经建立了关系,以便用户有很多帖子和评论,帖子属于用户并有很多评论,评论既属于帖子又属于用户。

尝试保存评论时出现了我的问题。在我的评论控制器中:

def create
    @comment = current_user.comments.build(params[:comment])
end

这不起作用,也没有说明评论属于哪个帖子。我还在“显示帖子”页面上显示“添加评论”表单,以便在帖子下方创建评论墙,但我的表单仍然只是说

<%= form_for @comment do |f| %>

并且不会将评论与 Show 下 Posts 控制器中的 Post 相关联。

我意识到可能有一个简单的答案,但找不到任何解释我的具体问题的资源。任何帮助表示赞赏。

4

3 回答 3

1

我会说您主要是将评论添加到特定帖子。所以从那里开始:

def create
  @post = Post.find(params[:post_id])  # <== this may be just `id`
  @comment = @post.comments.build(params[:comment])
  @comment.user = current_user

  if @comment.save
    # ... do things
  else
    # ..  render error
  end
end

为此,您需要嵌套您的路线:

resources :posts do
  resources :comments
end

form_for需要指明嵌套路线:

<%= form_for [@post, @comment] %>
于 2013-02-20T17:45:29.147 回答
1

您在 CommentsController#create 中做的事情是正确的

@comment = current_user.comments.build(params[:comment])

您缺少的部分是在您的 params[:comment] 中包含 post_id。这应该没问题,因为您总是知道您正在评论的帖子,您正在展示的帖子。所以在你的里面添加以下内容form_for @comment

<%= f.hidden_field :post_id, @post.id %>

我假设这是在您的显示帖子视图中,并且您在 PostController#show 中设置了@post

于 2013-02-20T17:50:19.047 回答
0

你可以做:

def create
  @comment = Comment.new(params[:comment])
  @comment.user = current_user
  if @comment.save ...
于 2013-02-20T17:35:59.337 回答