【发布时间】:2017-03-28 09:24:03
【问题描述】:
问题
假设我有两个具有 has_many-belongs_to 关系的模型。 has_many 定义了一个范围和一个名为grade 的整数属性。
class Parent < ApplicationRecord
has_many :children
scope :great, -> (min_grade) {where("grade > :grade", grade: min_grade)}
end
class Child < ApplicationRecord
belongs_to :parent
end
我想在子模型上创建一个范围,它使用父模型的范围。
有什么办法让我可以在 Parent 上使用范围的定义吗?
当前解决方案
我现在的做法是
class Child < ApplicationRecord
belongs_to :parent
scope :wit_great_parent, -> (min_grade) {
join(:parent).where("grade > :grade", grade: min_grade)}
end
但是,我在两个地方都复制了 where 子句。
问题
是否可以从子模型中调用 Parent 范围?
【问题讨论】:
-
孩子只有一个父母,所以我认为限定单个对象没有多大意义:/也许
return nil if parent.grade > min_grade? -
我想返回所有有更高成绩的父母的孩子。我不想让所有的孩子都按照你提出的“如果”一一检查。
标签: ruby-on-rails ruby ruby-on-rails-5 rails-activerecord