В моем приложении есть класс Budget.Бюджет может быть разных типов. Например, предположим, что существует два бюджета: FlatRateBudget и HourlyRateBudget.Оба наследуют от класса Budget.
Это то, что я получаю до сих пор:
class Budget < ActiveRecord::Base
validates_presence_of :price
end
class FlatRateBudget < Budget
end
class HourlyRateBudget < Budget
validates_presence_of :quantity
end
В консоли, если я делаю:
b = HourlyRateBudget.new(:price => 10)
b.valid?
=> false
b.errors.full_messages
=> ["Quantity can't be blank"]
Как и ожидалось.
Проблема в том, что поле "type" на STI происходит из параметров. Поэтому мне нужно сделать что-то вроде:
b = Budget.new(:type => "HourlyRateBudget", :price => 10)
b.valid?
=> true
Что означает, что rails выполняет проверки всуперкласс вместо того, чтобы создавать экземпляр подкласса после того, как я настроил тип.
Я знаю, что это ожидаемое поведение, так как я создаю экземпляр класса, которому не нужно поле количества, но мне интересноесли в любом случае есть указание rails запускать проверки для подкласса вместо супер.