Rails2.3.14で何か奇妙なことが起こっています。次のことが起こる理由はありますか?
例
次のようなクラスがあるとします。
class Article < ActiveRecord::Base
has_many :prices
end
class Price < ActiveRecord::Base
end
次に、irb
セッションで次のことが起こります。
>> a = Article.first
=> #<Article id: 980190962>
>> a.prices.first.object_id
=> 97498070
>> a.prices.first.object_id
=> 97470500
>> a.prices.first.object_id
=> 97451010
>> a.valid?
=> true
>> a.prices.first.object_id
=> 97374790
>> a.prices.first.object_id
=> 97374790
したがって、最初はobject_id
レコードにアクセスするたびに変更されます(はい、常に同じです)。後で、#valid?
この動作の呼び出しが停止します。代わりに、すべてが正常です。各呼び出しで同じオブジェクトを取得します。
何でこれが大切ですか?
に検証を追加するとしますPrice
class Price < ActiveRecord::Base
validates_presence_of :amount
end
次に、商品の価格を変更します。
>> a = Article.first
=> #<Article id: 980190962>
>> p = a.prices.first
=> #<Price id: 280438907, amount: 1.0, article_id: 980190962>
>> p.amount = nil # oops, accidentally we assigned nil
=> nil
>> p.valid?
=> false
>> a.valid?
=> true
あれは何でしょう?価格は無効ですが、記事は無効ですか?:validate
デフォルトでは-optionofhas_many
がに設定されているため、これは発生しないはずですtrue
。これは、object_id
sの変更が原因で発生します