親コントローラーによって構築されたネストされた属性に 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_id があるのは奇妙に思えるかもしれませんが、人々は同じ場所に新しいレビューを追加できます...
おそらくこのようですが、動作しません:
@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"}}