Rails:选择复杂的关系

时间:2013-04-12 10:15:55

标签: ruby-on-rails select relationship named-scope

我对铁杆很新,所以我请你耐心等待。

我在三个(ActiveRecord)模型之间有一些错综复杂的关系:

class Producer
  has_many :clients
end  

class Client
  belongs_to :producer
  has_many   :products
end

class Product
  belongs_to :client
  belongs_to :producer
end

特定产品的生产者不一定与产品客户的生产者相同(但他可以)。

我需要以某种方式选择/范围生产者的所有产品,他不是该产品客户的生产者。我无法绕过那个。我试着在制作人生产线上思考!= producer.products.clients.producer当然没有用或者有意义。

请帮帮忙?!

2 个答案:

答案 0 :(得分:1)

Product.includes(:producer, :client).
   where("products.producer_id" => X).
   where( "clients.producer.id != products.producer_id")

可以根据需要找到生产者ID为X的产品。

答案 1 :(得分:1)

@products = Product.select("products.*").joins(:clients).joins(:producers).where("products.producer_id = ? AND clients.producer_id != ?", producer_id, producer_id)

应该给你所需的结果。

希望它有所帮助!