最近将代码库和gem4一起升级到了rails4,现在我们收到了这个错误。
Failure/Error: it { is_expected.to ensure_inclusion_of(:usage).in_array(['Index', 'Slide', 'Body']).with_message("%{value} is not a valid usage") }
["Index", "Slide", "Body"] doesn't match array in validation
这是相关的型号代码
USAGES = ['Index', 'Slide', 'Body']
validates_inclusion_of :usage, :in => USAGES, :message => "%{value} is not a valid usage"
有什么我想念的吗?我不明白为什么会失败。
答案 0 :(得分:1)
validate_inclusion_of
在内部使用allow_value
。不可否认,我们应该给你一个更好的错误信息,告诉你这里发生了什么,但你应该能够编写以下测试来弄清楚发生了什么:
it { should allow_value("Index").for(:usage) }
it { should allow_value("Slide").for(:usage) }
it { should allow_value("Body").for(:usage) }
it do
should_not allow_value("something else").
for(:usage).
with_message("%{value} is not a valid usage")
end
我的猜测是,shoulda-matchers不会自动插入失败消息中的%{value}
内容。如果这是真的,那么我会做什么(在filing an issue之后)将消息提取到i18n密钥,然后将密钥的名称传递给with_message
。
答案 1 :(得分:0)
应该试试这个 -
validates :usage, inclusion: { :in => %w( Index Slide Body ), :message => "%{value} is not a valid usage" }
答案 2 :(得分:0)
为我工作 -
In [94]: a
Out[94]: array([10, 11, 12])
In [95]: a - np.arange(6)[:,None]
Out[95]:
array([[10, 11, 12],
[ 9, 10, 11],
[ 8, 9, 10],
[ 7, 8, 9],
[ 6, 7, 8],
[ 5, 6, 7]])