1

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)

アドバイスをいただければ幸いです。

ありがとうございました

4

1 に答える 1

1

これを行う1つの方法は次のとおりです。

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

これにより、2つのクエリが作成されます。最初のものは、現在のユーザーのカテゴリのリストを返します。次に、rubymap関数は、これらのカテゴリのIDを含む配列を作成します。2番目のクエリは、category_idがidの配列にある記事のリストを返します。2番目のクエリは次のようになります。

select articles.* from articles where articles.category_id in(1,2,3);
于 2012-05-05T16:46:26.370 に答える