Ошибка включения валидации Rails 'не включена в список'
Привет всем Я видел несколько проблем, похожих на мою, но ни одно из решений, похоже, не решило мою проблему, поэтому после полутора дней пробуя все, я решил попытать счастья, опубликовав свою проблему.
У меня есть таблица, которая в БД MySQL с этой моделью:
class Client< ActiveRecord::Base
validates :name, :length => {:maximum => 255}, :presence => true
validates :client_status, inclusion: { in: 0..2, :presence => true }
validates :client_type, inclusion: { in: 0..2, :presence => true}
end
Поэтому я хочу, чтобы client_status и client_type были только числовыми значениями от 0 до 2, вот rspec, который я написал, чтобы учесть это:
describe Client do
before do
@client = Client.new
end
it "should allow name that is less than 255 characters" do
long_char = 'a' *254
@client.name = long_char
@client.client_status = 0
@client.client_type = 1
@client.should be_valid
end
end
Это довольно простой тест, у меня есть true true для client_status и client_type, поэтому я должен добавить их в RSPEC, однако при запуске этого rspec выдается следующее сообщение об ошибке:
got errors: Value type is not included in the list, Status is not included in the list
Я попробовал это, чтобы увидеть, что на выходе:
puts "client type is: #{@client.client_type} and status is: #{@client.client_status} ."
Я получил этот вывод:
client type is: false and status is: .
Спасибо за чтение этого длинного поста, и я очень надеюсь, что кто-то может пролить свет на этот вопрос для меня.
Примечание. Я изменил названия модели /rspec и некоторых полей, чтобы не нарушать NDA моей компании.
С уважением, Суреп
2 ответа
- В рельсах вам нужно разделить валидаторы запятыми:
проверяет:client_status, наличие: true, включение: { in: 0..2 }
- Нет смысла проверять наличие, если вы проверяете на включение. Таким образом, вы можете упростить свой код с помощью простой проверки:
проверяет:client_status, включение: { in: 0..2 }
Я думаю, что вы должны использовать numericality:
как это:
validates :client_status, numericality: { only_integer: true, :greater_than_or_equal_to => 0, :less_than_or_equal_to => 2 }, :presence => true