2016-07-26 9 views
0

Sequel ORMを使用しています。私は3つのテーブル、「カテゴリ」、「商人」、「製品」を持っています。私は特定のカテゴリにある製品をフェッチする必要がSequel ORMで複数の結合を行う方法

class Product < Sequel::Model 
    many_to_one :merchants 
end 

class Merchant < Sequel::Model 
    many_to_one :category 
end 

はここでモデルです。それにどうやってJOINをするのですか?

私は特定の商人のための製品が必要な場合は、私は簡単に行うことができます

@merchant = Merchant.first(:id=>1) 
@merchant.products.each do |s| 
... 
end 

しかし、どのように私はカテゴリが商人や商人に関連しているカテゴリの製品を得ることができる製品に関連しています表?

答えて

0

は、カテゴリを取得し、そのカテゴリに属している商人を反復、およびプッシュ/配列にこの商人の製品を追加します。

products = [] 
category = Category.find(:id=>1) 
category.merchants.each do |m| 
    p<<m.products 
end 
+0

私はそれがm.productsの上で繰り返される必要があると思います。たとえば 'm.pr oducts.each do | m | ... end'を実行します。 JOINと同様の結果を得る方法はありますか? –

3

ここに1つの方法です:

Product. 
    select_all(:products). 
    association_join(:merchant). 
    where(:category_id=>category.id) 

しかし、アソシエーションを追加するのが最も簡単かもしれません:

Category.many_to_many :products, 
    :join_table=>:merchants, 
    :right_key=>:id, 
    :right_primary_key=>:merchant_id 

category.products 
関連する問題