我正在构建一个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
正在做我认为的事吗?
答案 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。 如果这个答案没有用,我会提前道歉。