如果我有这样的模型:
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不需要验证交易是否已经结算?
答案 0 :(得分:2)
您的示例代码是正确的。
在Rails 3中,子类中调用的验证仅适用于该子类的实例(除了超类验证)。超类验证适用于所有子类。
请记住,在使用STI时只能使用子类。换句话说,从不出于任何原因实例化超类。这样做会干扰Rails的内部STI魔术酱,让你有意想不到的行为和丑陋的黑客让你的事情再次发挥作用。
答案 1 :(得分:0)
嗯...我想你有一个列,表明这是CreditCardTransation
。所以你可以在范围内使用验证器: