我想稍微确认我正确地做到了这一点。使用rails单表继承我有以下模型和类方法:
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")
测试通过,一切似乎在rails控制台中正常工作。只是想通过在超类 PhoneNumber 中使用self并使用它来从父类执行子类的类方法来确认我不会遇到未来的麻烦。
有更好的方法吗?
答案 0 :(得分:1)
对我来说没问题。您可以进一步缩短方法:
class PhoneNumber < ActiveRecord::Base
def self.qual?(phone_number)
exists?(:phone_number => phone_number)
end
end
如果您覆盖子类中的qual?
方法,请注意STI中的bug。
修改强>
调用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")