为什么我的包含验证没有通过?

时间:2015-10-06 00:34:15

标签: ruby rspec sinatra

这应该是没脑子的。我有一个带RSpec的Sinatra应用程序,由于某些原因,我的验证失败了inclusion验证。

这是我的代码:

class Employee < ActiveRecord::Base
   validates :department, inclusion: { in: w%(Sales, Finance, Marketing) }
end

这是spec文件:

it 'should save a valid employee' do
  employee = Employee.new(name: 'Employee One',
                        email: 'example@gmail.com',
                        title: 'Software Engineer',
                        department: 'Sales')
  expect(employee).to be_valid
end

此测试失败,因为部门字段未包含在列表中#39;这是加重的,因为无论我放在哪个领域它都会失败。像这样的错误通常来自简单的事情。

我错过了什么?

2 个答案:

答案 0 :(得分:2)

您似乎遇到语法错误,我相信w%应为%w

您的%w语法与实际列表冲突。 %w不需要逗号,实际上会将它们添加到您的列表中(这不是您想要的)。删除它们。

 %w(Sales, Finance, Marketing)
 => ["Sales,", "Finance,", "Marketing"] 

vs

%w(Sales Finance Marketing)
 => ["Sales", "Finance", "Marketing"] 

答案 1 :(得分:2)

%w是构建字符串数组的捷径。我想你正在尝试构建一个像这样的字符串数组:

["Sales", "Finance", "Marketing"]

在这种情况下,使用%w的正确形式是:

%w(Sales Finance Marketing)

有关Ruby中%w语法的更多信息,请参阅this post

另外,请查看正确使用%w的{​​{3}}。

因此,要解决您的问题,请将您的Employee类更改为:

class Employee < ActiveRecord::Base
   validates :department, inclusion: { in: %w(Sales Finance Marketing) }
end