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