Rails - обновление модели в базе данных - PullRequest
1 голос
/ 19 июня 2011

Итак, я столкнулся с небольшой проблемой с проверками - я создал проверку, чтобы убедиться, что ни один пользователь в базе данных не имеет одинаковые адреса электронной почты. Затем я создал пользователя в базе данных. После этого я сказал user = User.find(1), который вернул пользователя, которого я только что создал. Затем я хотел изменить его имя, поэтому я сказал user.name = "New Name", а затем попытался использовать user.save, чтобы сохранить его обратно в базу данных. Однако эта команда больше не работает (вместо этого она возвращает false), и я думаю, что это связано с моим тестом проверки уникальности. Может кто-нибудь помочь мне с этой проблемой?

# == Schema Information
#
# Table name: users
#
#   id         :integer         not null, primary key
#  name       :string(255)
#  email      :string(255)
#  created_at :datetime
#  updated_at :datetime
#

class User < ActiveRecord::Base
    attr_accessor :password

    attr_accessible :name, :email,                    #says that the name and email attributes are publicly accessible to outside users.
                    :password, :password_confirmation #it also says that all attributes other than name and email are NOT publicly accessible.
                                                      #this protects against "mass assignment"

    email_regex = /^[A-Za-z0-9._+-]+@[A-Za-z0-9._-]+\.[A-Za-z0-9._-]+[A-Za-z]$/ #tests for valid email addresses.


    validates :name, :presence => true,
                     :length => {:maximum => 50}
    validates :email, :presence => true,
                      :format => {:with => email_regex},
                      :uniqueness => {:case_sensitive => false}
    validates :password, :presence => true,
                         :length => {:maximum => 20, :minimum => 6},
                         :confirmation => true

    before_save :encrypt_password

    def has_password?(submitted_password)
        #compare encrypted_password with the encrypted version of the submitted password.
        encrypted_password == encrypt(submitted_password)
    end

    def self.authenticate(email, submitted_password)
        user = find_by_email(email)
        if (user && user.has_password?(submitted_password))
            return user
        else
            return nil
        end 
    end

    private

        def encrypt_password 
            if (new_record?) #true of object has not yet been saved to the database
                self.salt = make_salt
            end
            self.encrypted_password = encrypt(password)
        end

        def encrypt(string)
            secure_hash("#{salt}--#{string}")
        end

        def secure_hash(string)
            Digest::SHA2.hexdigest(string) #uses cryptological hash function SHA2 from the Digest library to encrypt the string.
        end

        def make_salt
            secure_hash("#{Time.now.utc}--#{password}")
        end
end

1 Ответ

0 голосов
/ 19 июня 2011

попробуй сохранить!и посмотрим, что говорит вам исключение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...