我正在关注“Agile Web Development with Rails”一书并尝试将产品价格复制到 LineItem。覆盖 LineItem 上的设置器似乎是合适的选择。然而,正如在 Rails 中经常发生的那样,生成两个 setter 使练习变得不简单:
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 =()”......