Я пытаюсь добавить 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 'для 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"}}