Ruby on rails 3 RubyonRails-活动记录中的减量列有许多关联

Ruby on rails 3 RubyonRails-活动记录中的减量列有许多关联,ruby-on-rails-3,activerecord,has-many,Ruby On Rails 3,Activerecord,Has Many,我正在构建一个带有库存控制和购物车的电子商务应用程序。付款批准后,我想减少购物车中每种产品的数量。这意味着,我需要减少产品数量列,该列属于属于carts的第_行项目 我可以通过如下活动记录界面(在我的购物车模型中)减少一个: 也可以通过直接执行查询: connection.execute("UPDATE products SET qty = qty - 1 WHERE id IN (SELECT product_id FROM line_items WHERE cart_id = #{self.

我正在构建一个带有库存控制和购物车的电子商务应用程序。付款批准后,我想减少购物车中每种产品的数量。这意味着,我需要减少产品数量列,该列属于属于carts的第_行项目

我可以通过如下活动记录界面(在我的购物车模型中)减少一个:

也可以通过直接执行查询:

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
我相信有一种优雅的方法可以做到这一点。有人能帮我吗

非常感谢,

Rim

更新计数器怎么样

class购物车:行\u项目
结束
产品更新计数器(购物车产品:数量=>-1)
#=>更新“产品”设置“数量”=合并(“数量”,0)-1,其中(1,2)中的“产品”。“id”

更新计数器怎么样

class购物车:行\u项目
结束
产品更新计数器(购物车产品:数量=>-1)
#=>更新“产品”设置“数量”=合并(“数量”,0)-1,其中(1,2)中的“产品”。“id”

我就知道会有这样一个整洁的答案。这就是我喜欢rails的原因。非常感谢你的帮助!我知道会有这样一个很好的答案。这就是我喜欢rails的原因。非常感谢你的帮助!
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
class Cart < ActiveRecord::Base  
  has_many :line_items
  has_many :products, :through => :line_items
end

Product.update_counters(cart.products, :qty => -1)
# => UPDATE "products" SET "qty" = COALESCE("qty", 0) - 1 WHERE "products"."id" IN (1, 2)