我有Post
的模型has_many :comments
。发布评论的表单将与posts/show.html.erb
中的帖子一起显示。我有一个comments_controller
来处理评论的创建。在谷歌搜索,我找到了
<%= form_for([@post, Comment.new], :controller => 'comments', :action => 'create') do |f| %>
但这不起作用。我该怎么做?
答案 0 :(得分: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作为param发送到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