在播种Rails app时,.sample返回nil

时间:2015-10-10 23:30:51

标签: ruby-on-rails ruby rspec

我正在构建一个Rails应用程序,但我遇到了一个非常奇怪的错误。代码[true false].sample永远不会返回空白。但是,运行rake db:seed时有时会这样做。

在我的应用程序中,我有一个具有在线验证的商店模型:

class Store < ActiveRecord::Base
  validates_presence_of :accepts_credit, :parking
end

我也在这样的rspec中运行测试(总是通过)

require 'rails_helper'

RSpec.describe Store, type: :model do 
  it { should validate_presence_of :accepts_credit }  
  it { should validate_presence_of :parking        }  
end

现在,我的种子文件中有

Store.create(
  ...
  accepts_credit: [false, true].sample(1),
  parking:      %w[lots some none].sample(1),
  ... 
)

rake db:reset --trace的终端中运行此操作,我收到商店未创建的错误。我通过运行Store.create!代替Store.create来检查了这一点,导致终端显示错误。Validation failed: Accepts credit can't be blank

现在,我对Rails相对较新,但我不明白为什么示例方法.sample可能会返回空白。根据文档:http://ruby-doc.org/core-2.2.0/Array.html#method-i-sample,示例始终返回数组中的元素。

修改

我也使用.sample代替.sample(1)

我错过了什么? .blank正在做我认为的事吗?

2 个答案:

答案 0 :(得分:0)

false.blank?true(即“不存在”),因此如果要保留false值,则需要重写验证。如果您想要防范validates_inclusion_of :accepts_credit, in: [true, false],可以尝试nil

答案 1 :(得分:0)

我想您可能忘记了迁移。我想你应该运行:rake db:migrate:reset

尝试运行,rake db:migrate,然后rake db:seed。 如果这个答案没有用,我会提前道歉。