2012-05-05 19 views
1

DBからデータを取得する際に問題があります。モデル関連の種類はからの間です。Rails 3 - "through" - DBからデータを取得する方法?

私のサイトには、スポーツ、ニュース、天気予報などのカテゴリがあります。ユーザーがログインして記事を表示するカテゴリを選択している場合は、これらの記事。ここで

は私のモデルのように見える方法は次のとおりです。

class User < ActiveRecord::Base 
    has_many :user_categories 
    has_many :categories, :through => :user_categories 
end 

class Category < ActiveRecord::Base 
    has_many :articles 

    has_many :user_categories 
    has_many :users, :through => :user_categories 
end 


class UserCategory < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :category 
end 

class Article < ActiveRecord::Base 
    belongs_to :category 
end 

しかし、私はまだ、ユーザーの選択したカテゴリからすべての記事を取得する方法、方法を見つけることができません...私は

Article.joins("LEFT JOIN categories ON category.id = user_categories.category_id").where('user_categories.user_id = ?', current_user.id) 
のようなものを試してみました

私はすべてのアドバイスに感謝します!

Article.where(:category_id => current_user.categories.map {|c| c.id}) 

2つのクエリを作成します。

あなたは

答えて

1

ここでそれを行うには方法ですありがとうございました。最初のものは、現在のユーザのカテゴリのリストを返します。次に、ruby map関数は、それらのカテゴリのIDを含む配列を作成します。次に、2番目のクエリは、category_idがIDの配列に含まれる記事のリストを返します。 2番目のクエリは次のようになります:

select articles.* from articles where articles.category_id in(1,2,3); 
+0

が動作しているようです。ありがとう! – user984621

+0

yippie!助けてうれしい – tybro0103

関連する問題