Наследование одной таблицы с проверкой ruby ​​on rails

Если у меня есть такие модели:

class Transaction < ActiveRecord
    # create table called transactions and add type column to it.  
    # add common methods inside this class
end

class CashTransaction < Transaction
     # the type column will be CashTransaction and used to determine entry for this class in transactions table 
end

class CreditCardTransaction < Transaction
    validates :settled, :presence => true
    # the type column will be CreditCardTransaction and used to determine entry for this class in  transactions table 
end

Как я могу применить проверку, уникальную для CreditCardTransaction? Таким образом, Transaction и CashTransaction родительского класса не нуждаются в проверке того, была ли транзакция урегулирована?


person iTake    schedule 18.04.2013    source источник
comment
Вы используете Rails 3 или Rails 4? Этот вопрос помечен как оба.   -  person Substantial    schedule 19.04.2013


Ответы (2)


Код вашего примера правильный.

В Rails 3 проверки, вызываемые в подклассе, будут применяться только к экземпляру этого подкласса (в дополнение к проверкам суперкласса). Проверка суперкласса применяется ко всем подклассам.

Не забывайте работать только с подклассами при использовании STI. Другими словами, никогда не создавайте экземпляр суперкласса ни по какой причине. Это помешает внутреннему волшебному соусу STI Rails, оставив вас с неожиданным поведением и уродливыми хаками, чтобы все снова заработало.

person Substantial    schedule 19.04.2013

Хм... Я думаю, у вас есть столбец, указывающий, что это CreditCardTransation. Таким образом, вы можете использовать валидатор внутри области:

Проверка Rails 3 с условиями области действия

person Bob    schedule 18.04.2013