Проверка Rails завершается с ошибкой даже при вводе данных

#ruby-on-rails #ruby #ruby-on-rails-3 #validation

#ruby-on-rails #ruby #ruby-on-rails-3 #проверка

Вопрос:

Вот команда, которую я выполняю в консоли Rails:

 Person.create!(:firstName=>"matt", :lastName=>"master", :gender => 1)
  

Мой результат — это сообщение об ошибке:

 ActiveRecord::RecordInvalid: Validation failed: Firstname can't be blank
  

Мой код проверки модели выглядит следующим образом:

 class Person < ActiveRecord::Base
belongs_to :user, :class_name => 'User', :foreign_key => 'fk_ssmUserId'
validates_presence_of :firstName, :lastName
  

Когда я комментирую validates_presence_of , все работает, и мои данные правильно вводятся в базу данных, поэтому я знаю, что значения фактически передаются в новый объект. Я даже проверил новый объект, созданный внутри кода Rails::ActiveRecord::Validations, чтобы убедиться, что его экземпляр был создан правильно перед сохранением. Это было. Кроме того, у меня есть другие модели с validate_presence_of, которые каждый раз работают на 100% нормально. Это всего лишь одна модель. Я использую Rails 3.1.0.rc1.

Есть идеи?
Спасибо!

Ответ №1:

 :firstName=>"matt", :lastName=>"master", :gender => 1
  

убедитесь, что ключ соответствует столбцам вашей модели. Кажется, все должно быть в порядке.

Комментарии:

1. Ключ определенно соответствует столбцам модели. Вот почему объект создается правильно.

Ответ №2:

У меня есть подозрение, что эта ошибка связана с тем фактом, что вы создаете и сохраняете объект с помощью .create! метод из консоли. Похоже, что вашему классу Person требуется внешний ключ, значение, которое, вероятно, не создается при создании объекта на консоли. Чтобы проверить это, попробуйте ввести:

 test = Person.create(:firstName=>"matt", :lastName=>"master", :gender => 1)
  

без сбоев после метода .create. Это не должно привести к ошибке. Теперь введите:

 test
  

Очень вероятно, что у вас заданы требуемые значения ключа как «nil» и что объект не может быть сохранен с консоли, пока вы не заполните соответствующие значения.

Комментарии:

1. Спасибо за ваш ответ. Я на самом деле вызвал www.railshotline.com и этот парень мне помог. Я создал свои собственные методы получения и установки для FirstName. Они работали для всего, кроме создания в основном. Удалил их и написал другой метод на его месте, не меняя методы получения / установки. Бинго.