Rails STI:从SubClass调用的SuperClass模型方法

时间:2010-03-30 03:52:02

标签: ruby-on-rails ruby

我想稍微确认我正确地做到了这一点。使用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并使用它来从父类执行子类的类方法来确认我不会遇到未来的麻烦。

有更好的方法吗?

1 个答案:

答案 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")