1

我有一个Post模型has_many :comments。将发布评论的表单将与帖子一起显示在 中posts/show.html.erb。我有一个comments_controller应该处理评论的创建。在google上搜索,我发现

<%= form_for([@post, Comment.new], :controller => 'comments', :action => 'create') do |f| %>

但这不起作用。我该怎么做呢 ?

4

1 回答 1

1
class Post < ActiveRecord::Base
  has_many :comments

  accepts_nested_attributes_for :comments
#...

class Comment < ActiveRecord::Base
  belongs_to :post
#...

然后在表格中

form_for @post do |f|
  f.fields_for :comments do |c|
    c.text_field :title
    #...
  f.submit

这将通过活动记录的accepts_nested_attributes_for 创建关联对象,不需要单独的comments_controller。您正在提交到帖子控制器,该控制器正在处理在帖子更新期间创建关联对象。

使用 comments_controller,您可以做以下两件事之一:

将 item_id 作为参数发送到 comments_controller#new,获取该项目,然后从中构建新评论

@post = Post.find(params[:item_id); @comment = @post.comments.build

将 post_id 放在表单上的隐藏字段中,然后像往常一样创建评论

# in the controller
@comment = Comment.create(params[:comment])

# in the view
form_for @comment do |f|
  f.text_field :title
  #...
  f.hidden_field :post_id, value: @post.id
于 2012-12-06T22:25:23.073 回答