0

如果我有这样的模型:

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 不需要验证交易是否已结算?

4

2 回答 2

2

您的示例代码是正确的。

在 Rails 3 中,在子类中调用的验证仅适用于该子类的实例(除了超类验证)。超类验证适用于所有子类。

记住在使用 STI 时只使用子类。换句话说,永远不要以任何理由实例化超类。这样做会干扰 Rails 的内部 STI 魔法酱,让你有意想不到的行为和丑陋的 hack 来让事情重新工作。

于 2013-04-19T01:16:37.640 回答
0

嗯...我认为您有一个列表明这是CreditCardTransation. 因此,您可以在范围内使用验证器:

使用范围条件进行 Rails 3 验证

于 2013-04-18T23:00:28.553 回答