红宝石中是否有办法获得客户订购特定商品的结果?我的模型设置如下:
class Customer < ActiveRecord::Base
has_many :order_items
has_many :products, :through => :order_items
end
class OrderItem < ActiveRecord::Base
belongs_to :product
belongs_to :customer
end
class Product < ActiveRecord::Base
has_many :order_items
has_many :customers, :through => :order_items
belongs_to :category
end
理想情况下,我希望能够在ruby中编写一些可以返回订购特定产品的客户数量的东西。基本上我想写一些类似的东西:
Customer.product.where(:name => "Widget").first
完成这项工作并返回订购该产品的数据库中的第一位客户。基本上搜索产品表的名称字段,返回product_id,然后使用该product_id查看order_items表中与哪个customer_id相关联,并使用这些customer_ids返回与这些customer_ids关联的customers表中的字段
答案 0 :(得分:1)
在OrderProduct中搜索
OrderProduct.joins(:product).where("products.name = ?", "Widget").map(&:customer_id)
答案 1 :(得分:1)
Rails关联很丰富,您必须能够做到,Product.find_by_name(“widget”)。customers,返回订购该产品的所有客户。如果您想要第一位客户,请先致电.first。 (从手机输入,所以没有适当的缩进)
答案 2 :(得分:0)
此应该工作(未经测试的)
Customer.include(:products).where('product.name = ?', 'Widget').first