gpt4 book ai didi

ruby-on-rails - Rails STI 覆盖范围

转载 作者:行者123 更新时间:2023-12-04 06:30:11 24 4
gpt4 key购买 nike

假设我有一个 STI 设置,如下所示:

class User < ActiveRecord::Base
scope :busy, -> { where('busy_factor > 1') }
end

class HeroUser < User
scope :busy, -> { where('busy_factor > 5') }
end

因此,英雄用户对繁忙范围有不同的阈值。

现在,如果我这样做,我会收到警告:
Creating scope :busy. Overwriting existing method HeroUser.busy.

一切似乎都正常运行,但我想知道是否有更好的方法来做到这一点。

最佳答案

更清洁的方法如下:

  • 删除后代模型的范围
  • 引入一个类方法(即busy_factor),它将返回特定类型模型的繁忙因子。
  • 在适当的地方覆盖后代中的此类方法。
  • 将基类中的范围重写为:

    范围 :busy, -> { where('busy_factor > ?', self.busy_factor) }

  • 希望这可以帮助。

    关于ruby-on-rails - Rails STI 覆盖范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13315793/

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