0

私はレールにかなり慣れていないので、しばらくお待ちください。

3 つの (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

特定の製品の生産者は、製品クライアントの生産者と必ずしも同じではありません (ただし、同じである可能性はあります)。

彼がその製品 client のプロデューサーではないプロデューサーのすべての製品を何らかの形で選択/スコープする必要があります。私はそれについて頭を包むことはできません。私はプロデューサー != producer.products.clients.producer の行で考えようとしていますが、これはもちろん機能しないか意味がありません。

助けてください?!

4

2 に答える 2

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

必要に応じて、ID X を持つ生産者からの製品が検索されます。

于 2013-04-12T10:44:35.000 に答える
1
@products = Product.select("products.*").joins(:clients).joins(:producers).where("products.producer_id = ? AND clients.producer_id != ?", producer_id, producer_id)

必要な結果が得られるはずです。

それが役に立てば幸い !

于 2013-04-12T12:31:24.313 に答える