Я столкнулся с ошибкой в консоли Rails. Я использую последнюю версию Rails и Pry. Я пытаюсь создать пользователя. Я могу установить значения в пользовательских атрибутах, но не могу их сохранить. Может быть, User.new где-то зацикливается? Вот атрибут-код, связанные с моей моделью:Консоль Rails: Пользователь не будет сохранять - Уровень стека слишком глубокий
require 'bcrypt'
class User < ActiveRecord::Base
attr_accessible :first_name, :last_name, :description, :profile_photo, :password, :password_confirmation, :email
attr_reader :password
has_secure_password
validates_presence_of :email, :session_token, :first_name, :last_name, :password_digest
validates_uniqueness_of :email
validates :password, length: { minimum: 6, maximum: 20 }
before_validation :reset_session_token!, on: :create
before_save :encrypt_new_password
Это мои пользователи миграция:
class CreateUsers < ActiveRecord::Migration
def change
create_table :users do |t|
t.string :email, unique: true, null: false
t.string :password_digest, null: false
t.string :first_name, null: false
t.string :last_name, null: false
t.string :description, limit: 400
t.string :session_token, null: false
t.attachment :profile_photo
t.integer :profile_photo_id
t.datetime :profile_photo_updated_at
t.timestamps
end
add_index :users, :email
add_index :users, :first_name
add_index :users, :last_name
add_index :users, :session_token
add_index :users, :created_at
end
end
И вот моя Rails ошибки консоли при попытке создать пользователь с помощью User.new (значений) затем .save или User.create (значения) или и = User.new затем u.value = значение затем u.save.
[10] pry(User):1> u.save
(0.2ms) BEGIN
(0.2ms) ROLLBACK
SystemStackError: stack level too deep
from /Users/joecase/.rvm/gems/ruby-2.1.0/gems/pry-0.9.12.6/lib/pry/pry_instance.rb:328
[11] pry(User):1> u.errors
=> #<ActiveModel::Errors:0x0000010527ccb0
@base=
#<User id: nil, email: "[email protected]", password_digest: "111111", first_name: "Joe", last_name: "Case", description: nil, session_token: "CVnrsyyTwoOp9TZkqmVfTw", profile_photo_file_name: nil, profile_photo_content_type: nil, profile_photo_file_size: nil, profile_photo_updated_at: nil, profile_photo_id: nil, created_at: nil, updated_at: nil>,
@messages={}>
[12] pry(User):1> u.errors.full_messages
=> []
ЛЮБАЯ помощь будет оценена. Заранее спасибо.
encrypt_new_password:
def encrypt_new_password
return if password.blank?
self.hashed_password = encrypt(password)
end
reset_session_token:
def reset_session_token
self.session_token ||= SecureRandom.urlsafe_base64(16)
save!
end
Как выглядит метод 'encrypt_new_password'? Если вы выполняете сохранение в этом методе, это приведет к бесконечному циклу – usha
, пожалуйста, предоставьте «reset_session_token!», А также – xlembouras
Обновлено для обоих. – user3181113