Rails STI: методы модели суперкласса, вызываемые из подкласса - PullRequest
0 голосов
/ 30 марта 2010

Мне бы хотелось небольшое подтверждение, что я делаю это правильно. Используя рельсы одиночной таблицы наследования у меня есть следующие модели и метод класса:

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 все работает нормально. Просто хотел подтвердить, что я не собираюсь в будущем сталкиваться с проблемами, используя self в суперклассе PhoneNumber и используя это для выполнения методов класса на подклассах от родителя.

Есть ли лучший способ?

1 Ответ

1 голос
/ 30 марта 2010

Выглядит хорошо для меня. Вы можете сократить метод дальше:

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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...