0

ネストされた属性を使用してレコードを保存すると、仮想属性が子モデルに設定されません。

class Person < ActiveRecord::Base
  has_many :houses
  accepts_nested_attributes_for :houses
end

class House < ActiveRecord::Base
  attr_accessor :house_name  #virtual
  before_save do 
    puts attributes # doesn't include house_name when saving through parent model
    puts @house_name # nil when saving through parent model
  end

end

person = Person.find(1)
person.houses.count #=> 3
person.houses.first.house_name = 'crazy house'
person.save # house_name not in attributes

house = person.houses.first
house.house_name = 'moms house'
house.save #house_name is in attributes
4

1 に答える 1

0

あなたのコード:

person.houses.first.house_name = 'crazy house'

最初に関連付けられた を取得しますHousePersonあなたが家を変えたかどうかを知る方法はありません。あなたは魔法を過大評価しただけだと思います。あなたが必要とするupdate_attributesのは家のことだけです:

person.houses.first.update_attributes house_name: 'crazy house'
于 2012-04-11T17:34:58.693 に答える