gpt4 book ai didi

ruby-on-rails - rails 5 scope has_many 通过 distinct 和 where

转载 作者:行者123 更新时间:2023-12-04 07:40:39 24 4
gpt4 key购买 nike

是否可以在 Rails 作用域中同时使用 distinctwhere

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

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

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

最佳答案

当然,has_manyscope 参数只是返回一个关系,所以你可以说:

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

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

如果你愿意的话。

请记住,scope 可以访问 specialtiesdoctor_specialties 表,因此 name 可能会引用 specialties。名称。也许 Jeff 是一个需要多年特殊训练才能治疗的高维护患者。

此外,您可能希望像这样重写 where("name != 'Jeff'"):

where.not(specialties: { name: 'Jeff' })

通过将 name 显式绑定(bind)到 specialties 并使用分解查询而不是 SQL 片段来消除 name 引用的歧义。

关于ruby-on-rails - rails 5 scope has_many 通过 distinct 和 where,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49392435/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com