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. 基本クラスのスコープを次のように繰り返します。

    scope:busy、-> {where('busy_factor>?'、self.busy_factor)}

お役に立てれば。

于 2012-11-09T20:53:53.167 に答える