Rails ActiveRecord getter 覆盖
Rails ActiveRecord getter override
所以我有一个名为 Primer 的模型,它 has_many :amplicons。但是,在我的数据库中,Amplicons table 将引物 ID 存储在 forward_primer_id 或 reverse_primer_id 列中(即不是默认的 primer_id 约定)。在引物模型中,我想指示 Rails 在这两列中搜索扩增子 table 以查找 primer_id 并将这些扩增子与该引物相关联。我想我可以在 Primer 模型中编写一个方法来执行此操作,但是还有更多 Rails 方法吗?
提前致谢!
选项 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 returns 一个数组,因此您不能链接更多条件,即您不能调用 primer.amplicons.where(...)
选项 2
class Primer
def amplicons
Amplicon.where('forward_primer_id = ? OR reverse_primer_id = ?', self.id, self.id)
end
end
选项 2 returns 一个关系,因此您可以将更多条件链接到它。
has_many :forward_amplicons, class_name: "Amplicon", foreign_key: "forward_primer_id"
has_many :reverse_amplicons, class_name: "Amplicon", foreign_key: "reverse_primer_id"
所以我有一个名为 Primer 的模型,它 has_many :amplicons。但是,在我的数据库中,Amplicons table 将引物 ID 存储在 forward_primer_id 或 reverse_primer_id 列中(即不是默认的 primer_id 约定)。在引物模型中,我想指示 Rails 在这两列中搜索扩增子 table 以查找 primer_id 并将这些扩增子与该引物相关联。我想我可以在 Primer 模型中编写一个方法来执行此操作,但是还有更多 Rails 方法吗?
提前致谢!
选项 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 returns 一个数组,因此您不能链接更多条件,即您不能调用 primer.amplicons.where(...)
选项 2
class Primer
def amplicons
Amplicon.where('forward_primer_id = ? OR reverse_primer_id = ?', self.id, self.id)
end
end
选项 2 returns 一个关系,因此您可以将更多条件链接到它。
has_many :forward_amplicons, class_name: "Amplicon", foreign_key: "forward_primer_id"
has_many :reverse_amplicons, class_name: "Amplicon", foreign_key: "reverse_primer_id"