Ошибка включения валидации 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 ответа

Решение
  1. В рельсах вам нужно разделить валидаторы запятыми:
 проверяет:client_status, наличие: true, включение: { in: 0..2 }
  1. Нет смысла проверять наличие, если вы проверяете на включение. Таким образом, вы можете упростить свой код с помощью простой проверки:
 проверяет: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
Другие вопросы по тегам