0
我正在构建一个包含库存控制和购物车的电子商务应用程序。当付款获得批准后,我想减少购物车中每个产品的数量。这意味着,我需要减少属于属于购物车的line_items的产品数量列。Ruby on Rails - 通过活动记录has_many协会减少列
我可以递减一个通过这样的活动记录界面(在我的车模型):通过直接执行查询
self.line_items[0].product.decrement(:qty)
而且也:
connection.execute("UPDATE products SET qty = qty - 1 WHERE id IN (SELECT product_id FROM line_items WHERE cart_id = #{self.cart_id})")
这些方法唐但两者看起来不错。后者直接查询db模式,这显然不是最佳实践。第一种方法更好,但我不知道如何在所有记录上实现它。
我的模型,像这样:
class Product < ActiveRecord::Base
end
class Cart < ActiveRecord::Base
has_many :line_items
end
class LineItem < ActiveRecord::Base
belongs_to :cart
belongs_to :product
end
的模式是:
create_table "carts", :force => true do |t|
..
end
create_table "line_items", :force => true do |t|
..
t.integer "product_id"
t.integer "cart_id"
end
create_table "products", :force => true do |t|
..
t.integer "qty"
end
我相信有一个优雅的方式来做到这一点。任何人都可以帮助我吗?
非常感谢,
沿岸
我知道会有这样一个很好的整洁的答案。这就是我喜欢铁轨的原因。非常感谢您的帮助! – Rimian 2012-01-31 23:20:57