2012-11-09 99 views
4

比方說,我有一個STI設置如下:Rails的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. 

似乎一切正常,但我不知道是否有更好的方法來做到這一點。

+0

'HeroUser'確實繼承自'User'而不是'ActiveRecord :: Base'嗎? – Shadwell

+0

哎呀,是的。對不起 - 更新問題。 –

回答

8

的清潔器的方法是下列:

  1. 爲後代模型
  2. 刪除範圍介紹一個類的方法(即busy_factor),這將針對該特定類型的模型返回佔線因素。
  3. 在適當情況下,在後代重寫此類方法。
  4. Rewite在基類中的範圍爲:

    範圍: - {( '?busy_factor>',self.busy_factor)其中}忙,>

希望這有助於。

+0

是的,謝謝你,好主意! –

+0

不錯的主意,但它的工作? –

+0

是的,你爲什麼問? – Anton