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 回答