Rails ActiveRecord getter覆盖

时间:2015-05-18 15:24:59

标签: ruby-on-rails activerecord model-view-controller database-design

所以我有一个名为Primer的模型has_many:扩增子。但是,在我的DB中,Amplicons表将primer id存储在forward_primer_id或reverse_primer_id列中(即不是默认的primer_id对流)。在Primer模型中,我想指导Rails在primer_id的两个列中搜索Amplicons表,并将这些扩增子与该引物相关联。我想我可以在Primer模型中编写一个方法来执行此操作,但是还有更多的Rails方法吗?

提前致谢!

2 个答案:

答案 0 :(得分:1)

选项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

OPTION 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返回一个关系,因此您可以将更多条件链接到它。

答案 1 :(得分:0)

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