为什么我的包含验证没有通过?
Why isn't my inclusion validation passing?
这应该很简单。我有一个带有 RSpec 的 Sinatra 应用程序,由于某种原因,我的验证失败了 inclusion
验证。
这是我的代码:
class Employee < ActiveRecord::Base
validates :department, inclusion: { in: w%(Sales, Finance, Marketing) }
end
这是规范文件:
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
此测试失败,因为部门字段不是 'included in the list'。这很令人恼火,因为无论我输入哪个字段,它都会失败。像这样的错误通常来自简单的事情。
我错过了什么?
看来你的语法有误,我认为w%
应该是%w
。
您的 %w
语法与您的实际列表冲突。 %w
使逗号变得不必要并且实际上将它们添加到您的列表中(这不是您想要的)。删除它们。
%w(Sales, Finance, Marketing)
=> ["Sales,", "Finance,", "Marketing"]
对比
%w(Sales Finance Marketing)
=> ["Sales", "Finance", "Marketing"]
%w
是构建字符串数组的快捷方式。我认为您正在尝试构建这样的字符串数组:
["Sales", "Finance", "Marketing"]
在那种情况下,使用 %w
的正确形式是:
%w(Sales Finance Marketing)
有关 Ruby 中 %w
语法的更多信息,请参阅 this post。
此外,请查看 Rails Documentation for inclusion 中 %w
的正确用法。
因此,要解决您的问题,请将您的 Employee
class 更改为如下所示:
class Employee < ActiveRecord::Base
validates :department, inclusion: { in: %w(Sales Finance Marketing) }
end
这应该很简单。我有一个带有 RSpec 的 Sinatra 应用程序,由于某种原因,我的验证失败了 inclusion
验证。
这是我的代码:
class Employee < ActiveRecord::Base
validates :department, inclusion: { in: w%(Sales, Finance, Marketing) }
end
这是规范文件:
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
此测试失败,因为部门字段不是 'included in the list'。这很令人恼火,因为无论我输入哪个字段,它都会失败。像这样的错误通常来自简单的事情。
我错过了什么?
看来你的语法有误,我认为w%
应该是%w
。
您的 %w
语法与您的实际列表冲突。 %w
使逗号变得不必要并且实际上将它们添加到您的列表中(这不是您想要的)。删除它们。
%w(Sales, Finance, Marketing)
=> ["Sales,", "Finance,", "Marketing"]
对比
%w(Sales Finance Marketing)
=> ["Sales", "Finance", "Marketing"]
%w
是构建字符串数组的快捷方式。我认为您正在尝试构建这样的字符串数组:
["Sales", "Finance", "Marketing"]
在那种情况下,使用 %w
的正确形式是:
%w(Sales Finance Marketing)
有关 Ruby 中 %w
语法的更多信息,请参阅 this post。
此外,请查看 Rails Documentation for inclusion 中 %w
的正确用法。
因此,要解决您的问题,请将您的 Employee
class 更改为如下所示:
class Employee < ActiveRecord::Base
validates :department, inclusion: { in: %w(Sales Finance Marketing) }
end