Проверьте наличие вложенных атрибутов в before_save - PullRequest
1 голос
/ 03 апреля 2011

Когда вы отправляете форму в контроллер для сохранения в ActiveRecord, вы можете добавить пропущенные поля через @foo.field = 'bar'.Я хотел бы сделать то же самое для вложенного атрибута, но я не могу понять, как.

Я пытаюсь сделать что-то вроде:

'@foo.bar.field = 'baz'

где модель foo

accepts_nested_attributes_for :bar

, если это имеет больше смысла

Редактировать: соответствующий код модели

class Product < ActiveRecord::Base
  ...  

  has_many :update

  belongs_to :user, :foreign_key => 'user_id'

  accepts_nested_attributes_for :update, :reject_if => lambda {|a| a[:body].blank?}

  ...
end

Обновить модель

class Update < ActiveRecord::Base
   ...
  belongs_to :product, :foreign_key => 'product_id'

  geocoded_by :address
  reverse_geocoded_by :latitude, :longitude

  validates :body, :presence => true

end

Ответы [ 2 ]

2 голосов
/ 03 апреля 2011
 ((params[:product])["update_attributes"])["0"].merge!({"user_id" => u_id})

долго наматывается, но это решило

1 голос
/ 03 апреля 2011
@foo.bar.field = 'baz'

- это не accepts_nested_attributes_for. Вы можете добавить before_save проверку в Bar модель, и тогда она будет отлично работать с:

bar = @foo.bar
bar.field = "baz"
bar.save
# => now before_save will be executed

Через accepts_nested_attributes_for это будет выглядеть так:

@foo.bar_attributes = { :id => XXX, :field => "baz" }
@foo.save

В этом случае вы должны добавить проверку в Foo модель

...