English 中文(简体)
铁路——更新数据库中的模型
原标题:Rails -- updating a model in a database

So I ran into a little issue with validations -- I created a validation to ensure that no users in a database share identical email addresses. Then I created a user in the database. Afterward, I said user = User.find(1) which returned the user I had just created. Then I wanted to change its name so I said user.name = "New Name" and then tried to use user.save to save it back into the database. However, this command isn t working anymore (it returns false instead) and I think it has to do with my uniqueness validation test. Can someone help me with this problem?

# == 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
最佳回答

拯救! 并了解例外情况告诉你

问题回答

暂无回答




相关问题
what is wrong with this mysql code

$db_user="root"; $db_host="localhost"; $db_password="root"; $db_name = "fayer"; $conn = mysqli_connect($db_host,$db_user,$db_password,$db_name) or die ("couldn t connect to server"); // perform query ...

Users asking for denormalized database

I am in the early stages of developing a database-driven system and the largest part of the system revolves around an inheritance type of relationship. There is a parent entity with about 10 columns ...

Easiest way to deal with sample data in Java web apps?

I m writing a Java web app in my free time to learn more about development. I m using the Stripes framework and eventually intend to use hibernate and MySQL For the moment, whilst creating the pages ...

join across databases with nhibernate

I am trying to join two tables that reside in two different databases. Every time, I try to join I get the following error: An association from the table xxx refers to an unmapped class. If the ...

How can I know if such value exists in database? (ADO.NET)

For example, I have a table, and there is a column named Tags . I want to know if value programming exists in this column. How can I do this in ADO.NET? I did this: OleDbCommand cmd = new ...

Convert date to string upon saving a doctrine record

I m trying to migrate one of my PHP projects to Doctrine. I ve never used it before so there are a few things I don t understand. In my current code, I have a class similar to this: class ...

热门标签