4

假设我有如下 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.

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

4

1 回答 1

8

更清洁的方法如下:

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

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

希望这可以帮助。

于 2012-11-09T20:53:53.167 回答