0
class Participant
  has_many :cells
end

class Round
  has_many :cells
end

class Question
  has_many :cells
end

class Cell
   belongs_to :participant
   belongs_to :question
   belongs_to :Round
end

a = an instance of Participant, Question or Round
b = an instance of Participant, Question or Round

指定された a と b に属する Cell のすべてのインスタンスにわたって繰り返しを書きたいと思います。a と b が同じクラスのインスタンスではないことはわかっていますが、それらがどちらであるかは前もってわかりません。

私は書くことができると思います:

if a.class == Participant && b.class == Question
  Cell.select(participant_id: a.id, question_id: b.id).each do 
  ... and so on

しかし、それは本当に醜いです。何らかの方法で join メソッドを使用する必要があると思いますが、私はそれを理解できませんでした。ありがとう!

4

1 に答える 1

2

試す:

Cell.where(:"#{a.class.to_s.underscore}_id": a.id, :"#{b.class.to_s.underscore}_id": b.id).each do |cell|
  # your code
end

しかし、もっと良い方法があると確信しています。

于 2012-10-23T21:52:48.210 に答える