0

私はRailsでarel/scopesを学ぼうとしています..私は次のモデルを持っています..

Class Category
  has_many :questions

Class Question
  belongs_to :category
  has_many :answers

Class Answer
  belongs_to :question
  # attributes: owner_name

「ボブ」など、所有者名で回答があるカテゴリを見つけようとしています。このために、has_many :through 関係を Category と Answer の間に追加し、..

Category.find_each do |c|
  c.answers.find_by_owner_name("bob")
end

..しかし、これはやり過ぎのようで、長いです。Category クラスで定義されたスコープを使用して、これをより適切に行うことはできますか?

ありがとう。

4

2 に答える 2

0

find_each アプローチは、パフォーマンス面で間違いなくあなたを殺します。Category と Answer の間に has_many :through 関係を作成することは正しいです。それができたら、それは簡単です:

Category.joins(:answers).where("answers.owner_name = ?", "Bob")
于 2013-04-11T19:36:05.990 に答える
0
@categories = Answer.where(:owner_name => "Bob").collect(&:category)

これを実現するには、デリゲートを使用できます。

Class Answer
  belongs_to :question
  delegate :category, :to => :question, :allow_nil => true
end

または、メソッドを使用したくない場合は、次のdelegateようにすることもできます。

@categories = Answer.where(:owner_name => "Bob").collect(&:question).collect(&:category)
于 2013-04-11T18:52:40.383 に答える