2010-03-30 43 views
0

我想稍微確認一下,我正確地做了這件事。使用Rails的單表繼承我有以下型號及類方法:Rails STI:SuperClass模型方法從子類調用

class PhoneNumber < ActiveRecord::Base 
    def self.qual?(number) 
    klass = self 
    klass.exists?(:phone_number => phone_number) 
    end 
end 

class Bubba < PhoneNumber 
end 

class Rufus < PhoneNumber 
end 

Bubba.qual?("8005551212") 

測試通過,一切似乎在軌控制檯正常工作。只是想通過在超類PhoneNumber中使用self並且使用它在父類的子類上執行類方法來確認我沒有爲將來的麻煩而前進。

有沒有更好的方法?

回答

1

對我來說看起來沒問題。您可以縮短方法進一步:

的這個 bug
class PhoneNumber < ActiveRecord::Base 
    def self.qual?(phone_number) 
    exists?(:phone_number => phone_number) 
    end 
end 

銘記在STI如果重寫的子類的qual?方法。

編輯

調用qual?方法:

# out side your STI models 
Bubba.qual?("8003455678") 
Rufus.qual?("8003455678") 
PhoneNumber.qual?("8003455678") 

# in the class method of your STI model 
qual?("8003455678") 

# in the instance method of your STI model 
self.class.qual?("8003455678") 
+0

優秀。 因此,繼承的類方法完全在子類的範圍內執行。因此,類方法不需要指定類ala MyClass.class_method。 – Karl 2010-03-30 18:18:39

+0

我在回答中添加了一些其他信息。看一看。 – 2010-03-30 18:35:56