模型order.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}
一切都好。我不明白为什么它在一个地方工作,但在测试中没有? ......
灯具都可以。
请帮忙。
答案 0 :(得分:1)
问题很可能是,您将付款类型存储在常量中。
为使您的测试正常运行,在rails加载PaymentTypes
模型之前,必须在数据库中提供Order
,而情况可能并非如此。
解决此问题的一种方法是使用(memoized)类方法来存储您的付款类型。只要您在数据库中的所有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