在Rails中找到客户订购商品的内容

时间:2014-01-25 21:25:15

标签: ruby-on-rails ruby

红宝石中是否有办法获得客户订购特定商品的结果?我的模型设置如下:

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表中的字段

3 个答案:

答案 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