【问题标题】:Single Table Inheritance with validation ruby on rails带有验证 ruby​​ on rails 的单表继承
【发布时间】:2013-04-18 22:11:41
【问题描述】:

如果我有这样的模型:

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

【问题讨论】:

  • 您使用的是 Rails 3 还是 Rails 4?这个问题被标记为两者。

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-4


【解决方案1】:

您的示例代码是正确的。

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

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

【讨论】:

    【解决方案2】:

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

    Rails 3 Validation with Scope Conditions

    【讨论】:

      猜你喜欢
      • 2013-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-08
      • 2015-02-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多