Как запретить Rails Console выполнять немедленный откат транзакции db?

Я новичок в рельсах, и у меня проблемы с консолью. Я хотел бы добавить записи в свою таблицу Users и протестировать некоторые функции. Однако каждый раз, когда я выполняю User.create или аналогичную функцию, она успешно завершается, а затем немедленно откатывается. Как предотвратить немедленный откат?

Я не в режиме песочницы.

Ниже приведен вывод, который я получаю в консоли при попытке создать пользователя. Он говорит, что пользователь существует, а затем немедленно откатывает транзакцию. Затем я запускаю User.all, чтобы показать, что транзакция действительно откатилась.

>>> User.create(first_name: "derek", last_name: "harrington", email: "[email protected]")
 (0.1ms)  begin transaction
 User Exists (0.2ms)  SELECT 1 FROM "users" WHERE "users"."email" = '[email protected]' LIMIT 1
 (0.1ms)  rollback transaction
 => #<User id: nil, first_name: "derek", last_name: "harrington", email: "[email protected]", password_digest: nil, credit_card_id: nil, address_id: nil, created_at: nil, updated_at: nil> 
>>> User.all
 User Load (0.3ms)  SELECT "users".* FROM "users" 
 => [] 

Как сделать эти изменения постоянными и предотвратить откат?

Изменить:

Вот содержимое моей модели User

class User < ActiveRecord::Base
  attr_accessible :first_name, :last_name, :email, :password, :password_confirmation
  has_secure_password

  validates :first_name, presence: true, length: { maximum: 50 }
  validates :last_name, presence: true, length: { maximum: 50 }
  VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
  validates :email, presence:   true,
                    format:     { with: VALID_EMAIL_REGEX },
                    uniqueness: true
  validates :password, confirmation: true, length: { minimum: 6, maximum: 50 }
  validates :password_confirmation, presence: true
end

person Derek Harrington    schedule 26.03.2012    source источник
comment
Опубликуйте содержимое вашей модели User. Вы также должны присвоить результат User.create переменной, чтобы вы могли проверить ошибки в ней.   -  person James    schedule 26.03.2012
comment
Я присвоил результаты переменной, как вы предложили, и, похоже, в переменной она работает так, как ожидалось. Он просто не останется в базе данных.   -  person Derek Harrington    schedule 26.03.2012
comment
Это просто несохраненный экземпляр User, суть в том, чтобы проверить на нем ошибки. Если он у вас есть в переменной user, то проверьте, что вы получаете от user.errors.   -  person James    schedule 26.03.2012
comment
Вам нужно окружить текст обратными кавычками, чтобы использовать встроенный код.   -  person James    schedule 26.03.2012
comment
Понятно. Догадаться. В моей модели он указывает password_confirmation как требуется, и я не включил его, когда пытался создать User. user.errors показал, что проблема была в этом. Большое спасибо за Вашу помощь.   -  person Derek Harrington    schedule 26.03.2012


Ответы (2)


Похоже, вы не предоставили подтверждение пароля, и поэтому он не сохранялся.

person James    schedule 26.03.2012

Это странно.

Вы добавили какой-то параметр конфигурации? Если да, то лучше просмотрите их.

Вы также можете попробовать очень простое приложение rails, чтобы проверить поведение.

person shigeya    schedule 26.03.2012