【发布时间】:2010-04-27 13:48:59
【问题描述】:
我正在尝试将 user_id 添加到由父控制器构建的嵌套属性中,但它似乎没有达到预期的效果?
即。我有一个名为 Place.rb 的模型,其中 accepts_nested_attributes_for :reviews 和 has_many :reviews, :as => :reviewable, :dependent => :destroy
嵌套属性工作正常,我在 Places 控制器中构建它,就像这样......
新动作
@review = @place.reviews.build(:user_id => current_user.id)
创建动作
params[:place].merge(:user_id => current_user.id)
params[:place][:reviews_attributes].merge!(:user_id => current_user.id)* bad
@place = Place.new(params[:place])
这是原始的,用于地方模型获取 user_id,现在我也需要嵌套评论模型的 user_id。地方和评论都有 user_ids 可能看起来很奇怪,但人们可以为同一个地方添加新评论...
可能像这样但不起作用:
@place = Place.new(params[:place].merge(:user_id => current_user.id, :reviews_attributes => { :user_id => current_user.id } ))
得到错误:undefined method with_indifferent_access' for 3:Fixnum`
或
@place = Place.new(params[:place].merge(:user_id => current_user.id, :reviews_attributes => { "0" => { :user_id => current_user.id }}))
添加了正确的 user_id 但将评论的内容替换为 NULL ;-(
我之前是通过表单添加用户,但想通过控制器来完成,这样它只会在创建时添加 user_id,因为特定评论可能会被其他人更新,而我不希望更新更改原始作者的 user_id...
有效的旧方法:
<%= e.label :content, "Review" %><br />
<%= e.text_area :content, :rows => 20, :class => 'jquery_ckeditor' %><br />
<%= e.hidden_field :user_id, :value => current_user.id %> #want to remove this line
但是通过控制器,带有选项的构建方法没有效果?有任何想法吗?我不能通过构建来做到这一点吗?
日志中的输出:
Parameters: {"commit"=>"Submit", "action"=>"create", "city_id"=>"prague",
"controller"=>"places", "place"=>{"address"=>"fsdfsdf", "name"=>"sdfsdfsd",
"reviews_attributes"=>{"0"=>{"content"=>"<p>\r\n\tsdfsdfsdfsdfsdfsdfsdf sdfsdfsdf</p>\r
\n"}}, "website"=>"", "city_id"=>"1036", "place_type"=>"1"}}
【问题讨论】:
-
我不是很了解。您在控制器中添加了
user_id,但它不起作用,对吗?你之前是如何在控制器中构建review的? -
我一直在通过地方控制器构建评论,它工作正常,除了在我通过视图添加 user_id 进行评论之前......我包括在内,现在我是尝试直接在构建方法中执行此操作。即在它只是@place.reviews.build 之前,现在我尝试使用@place.reviews.build(:user_id => current_user.id) 这似乎可以从控制台工作。
标签: ruby-on-rails modeling nested-forms nested-attributes