Rails 4通过n:n关系查询引用

时间:2014-11-11 11:09:04

标签: activerecord ruby-on-rails-4

以下结构

  Production
  belongs_to :offer
  has_many :production_positions
  has_many :products, through: :production_positions

  Product
  has_many :production_positions
  has_many :productions, through: :production_positions

  ProductionPosition
  belongs_to :production
  belongs_to :product

现在我想获得包含product_id的所有商品1.我如何查询数据库?

获得制作非常简单:

  Production.includes(:products).where("products.id" => 1)

但我如何获得引用的优惠?

 Offer.includes(:production).includes(:products).where("products.id" => 1) 

上面的行会产生以下错误: 在商品

上找不到名为“产品”的协会

1 个答案:

答案 0 :(得分:0)

has_many :products, through: :production课程中添加Offer,然后尝试以下操作:

Offer.select('offers.*').joins(:products).where('products.id = ?', 1)

我认为你的has_one :production课程中有Offer。您可以添加范围来执行查询:

class Offer < ActiveRecord::Base
  has_one :production
  has_many :products, through: :production

  scope :with_product_id, ->(id) do
    select('offers.*').
      joins(:products). 
      where('products.id = ?', id)
  end
end

示例(与产品1一起提供):

Offer.with_product_id(1)