0

模型顺序.rb

class Order < ActiveRecord::Base
    attr_accessible :address, :email, :name, :payment_type_id
    belongs_to :payment_type

    PAYMENT_TYPES = PaymentType.pluck(:id)

    validates :name, :address, :email, :payment_type_id, :presence => true
    validates :payment_type_id, :inclusion => {:in => PAYMENT_TYPES}
end

模型 payment_type.rb

class PaymentType < ActiveRecord::Base
  attr_accessible :name, :id

  has_many :order
end

在浏览器中,验证工作正常,如果错误则给出错误,否则继续。但问题是当我rake test:functionals从终端运行时。测试没有通过验证。如果我评论这一行:

validates :payment_type_id, :inclusion => {:in => PAYMENT_TYPES}

一切正常。我不明白为什么它可以在一个地方工作,但在测试中却不行?...

夹具一切正常。

请帮忙。

4

1 回答 1

1

最有可能的问题是,您将付款类型存储在一个常量中。

为了使您的测试正常工作,PaymentTypes必须在 rails 加载您的Order模型之前在数据库中可用,但情况可能并非如此。

解决此问题的一种方法是使用(记忆的)类方法来存储您的付款类型。只要你PaymentTypes在数据库中访问这个类方法,你应该没问题。

class Order < ActiveRecord::Base
  validates :payment_type_id, :inclusion => { :in => self.payment_types }

  def self.payment_types
    @@payment_types ||= PaymentType.pluck(:id)
  end
end
于 2012-11-02T02:59:45.557 回答