修订:这里的错误是我在同一个哈希中存储了几个不同的模型。这是我构建数组的内部方式。无论如何,我为这里的错误道歉。我没有办法回答这个问题。
所以我在控制器规范中有一个RSpec before(:each)块。我的示例模型有一个状态字段和以下验证:
class Model < ActiveRecord::Base
STATI = [ "vacant", "deleted", "deactivated"]
...
validates :status, :inclusion => { :in => STATI }
...
end
在我的规范中,我有以下代码。
describe Controller do
...
describe "some methods" do
before(:all) do
@models = []
10.times { @models << Factory(:model) }
end
before(:each) do
@models.each { |m| m.update_attributes(:status => "vacant") }
end
...
end
end
当我运行规范时,所有其他描述块运行正常。它会产生一个错误: ActiveRecord的:: RecordInvalid: 验证失败:状态未包含在列表中 并指向m.update_attributes(:status =&gt;“vacant”)的行。
感谢您的帮助。
答案 0 :(得分:0)
我会在您的模型定义中尝试以下内容:
class Model < ActiveRecord::Base
STATI = %w[vacant deleted deactivated]
...
validates :status, :inclusion => STATI
...
end
%w是创建字符串数组的首选语法,允许从数组定义中删除"
和,
。
您不需要:in =>
进行包含验证。