在3路连接上迭代

ldioqlga  于 2022-09-21  发布在  Ruby
关注(0)|答案(1)|浏览(170)
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方法,但我一直没能弄清楚。

cfh9epnr

cfh9epnr1#

尝试:

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

但我很确定还有更好的办法。

相关问题