是否可以在 rails 范围内同时使用 distinctwhere

# this works
has_many: specialties, -> { distinct }, through: :doctor_specialties

# this also works
has_many: specialties, -> { where "name != 'Jeff'" }, through: :doctor_specialties

是否可以将它们合并为一个范围?

最佳答案

当然,scopehas_many 参数只是返回一个关系的东西,所以你可以说:

has_many :specialties, -> { distinct.where("name != 'Jeff'") }, ...

或者
has_many :specialties, -> { where("name != 'Jeff'").distinct }, ...

如果你希望。

请记住,范围将可以访问 specialtiesdoctor_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/

10-13 05:07