「Rails を使用したアジャイル Web 開発」の本に従って、製品の価格を LineItem にコピーしようとしています。LineItem のセッターをオーバーライドするのが適切な選択のようです。ただし、Rails ではよくあることですが、セッターが 2 つ生成されると、作業が簡単ではなくなります。
def product_id=(product_id)
product = Product.find(product_id)
write_attribute(:price, product.price)
write_attribute(:product_id, product_id)
end
def product=(product)
self.product_id = product.id #wtf? why isn't this the default?
end
このコードは、オブジェクトを設定するか ID を設定するかに関係なく、期待どおりに機能します。どちらの場合も、価格がコピーされます。私が不思議に思うこと:
「product=(..)」を上書きしなくても、このデリゲートが機能しないのはなぜですか? 奇妙なことに、「self」を削除しないと機能しません。明らかに「product_id =()」に委任されません...