是否可以在 rails 范围内同时使用 distinct
和 where
?
# this works
has_many: specialties, -> { distinct }, through: :doctor_specialties
# this also works
has_many: specialties, -> { where "name != 'Jeff'" }, through: :doctor_specialties
是否可以将它们合并为一个范围?
最佳答案
当然,scope
的 has_many
参数只是返回一个关系的东西,所以你可以说:
has_many :specialties, -> { distinct.where("name != 'Jeff'") }, ...
或者
has_many :specialties, -> { where("name != 'Jeff'").distinct }, ...
如果你希望。
请记住,范围将可以访问
specialties
和 doctor_specialties
表,因此 name
可能会引用 specialties.name
。也许杰夫是一个需要多年特殊训练来治疗他的高维护患者。此外,您可能希望像这样重写
where("name != 'Jeff'")
:where.not(specialties: { name: 'Jeff' })
通过明确地将
name
引用绑定(bind)到 specialties
并使用分解的查询而不是 SQL 片段来消除 ojit_code 引用的歧义。关于ruby-on-rails - rails 5 范围 has_many 到 distinct 和 where,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49392435/