#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. Они работали для всего, кроме создания в основном. Удалил их и написал другой метод на его месте, не меняя методы получения / установки. Бинго.