2015-10-06 2 views
0

Это не должно быть проблемой. У меня есть приложение Sinatra с RSpec, и по какой-то причине мои проверки не выполняются с помощью проверки 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: '[email protected]', 
         title: 'Software Engineer', 
         department: 'Sales') 
    expect(employee).to be_valid 
end 

Этот тест не потому, что поле отдел не «включен в список». Это отягчает, потому что оно терпит неудачу независимо от того, какую область я ставил. Такие ошибки обычно происходят из чего-то простого.

Что мне не хватает?

+0

Добро пожаловать на переполнение стека. Не обязательно или особенно желательно добавлять теги к заголовку, такие как «(Sinatra, RSpec)». Вместо этого, либо полагайтесь на теги, которые вы определяете для вопроса, либо обрабатываете их в заголовке естественно, а не искусственно. –

ответ

2

%w является укороченный для создания массива строк. Я думаю, что вы пытаетесь создать массив строк, как это:

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

В этом случае правильная форма использования %w будет:

%w(Sales Finance Marketing) 

См this post для получения дополнительной информации о %w синтаксиса в Рубине ,

Также обратите внимание на Rails Documentation for inclusion, где %w используется правильно.

Таким образом, чтобы решить вашу проблему, измените Employee класс выглядеть следующим образом:

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

да, это было! Благодарю. –

2

Кажется, что у вас есть синтаксическая ошибка, я считаю, w% должен быть %w.

Ваш синтаксис %w противоречит вашему фактическому списку. %w делает запятые необязательными и фактически добавляет их в ваш список (это не то, что вы хотите). Удалить их.

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

против

%w(Sales Finance Marketing) 
=> ["Sales", "Finance", "Marketing"] 
Смежные вопросы