Rails ActiveRecord getter override



所以我有一个叫做Primer的模型,它有许多扩增子。然而,在我的DB中,Amplicons表将引物id存储在forward_primer_id或reverse_primer_id列中(即不是默认的primer_id转换)。在Primer模型中,我想指导Rails在这两列中搜索Amplicons表中的primer_id,并将这些Amplicons与该Primer关联起来。我想我可以在Primer模型中编写一个方法来做到这一点,但是否有更多的Rails方式?

提前感谢!

OPTION 1

class Primer
  has_many :forward_amplicons, class_name: "Amplicon", foreign_key: :forward_primer_id
  has_many :reverse_amplicons, class_name: "Amplicon", foreign_key: :reverse_primer_id
  def amplicons
    self.forward_amplicons + self.reverse_amplicons
  end
end

选项1返回一个数组,所以你不能链接更多的条件,即你不能调用primer.amplicons.where(...)

选项2

class Primer
  def amplicons
    Amplicon.where('forward_primer_id = ? OR reverse_primer_id = ?', self.id, self.id)
  end
end

OPTION 2返回一个关系,因此您可以将更多的条件链接到它。

 has_many :forward_amplicons,   class_name: "Amplicon", foreign_key: "forward_primer_id"
 has_many :reverse_amplicons, class_name: "Amplicon", foreign_key: "reverse_primer_id"

最新更新