RailsTutorial Глава 7 - Сообщение об ошибке для файла User.rb - PullRequest
0 голосов
/ 31 января 2011

Я получаю сообщение об ошибке, когда запускаю этот фрагмент кода ruby.Сообщение об ошибке говорит о том, что он ищет конечный тег в конце файла.Однако я попытался добавить дополнительные конечные теги, но безуспешно.Это сообщение об ошибке:

/Users/woshea/rails/sample_app2/app/models/user.rb:57: syntax error, unexpected kEND, expecting $end

Это файл:

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

require 'digest'

class User < ActiveRecord::Base  
  attr_accessor :password
    attr_accessible :name, :email, :password, :password_confirmation

  email_regex = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i

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

end

before_save :encrypt_password

def has_password?(submitted_password) 
  encrypted_password == encrypt(submitted_password)  
end  


  private

     def encrypt_password
       self.salt = make_salt if new_record?
       self.encrypted_password = encrypt(password)
     end

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

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

     def secure_hash(string)
       Digest::SHA2.hexdigest(string)
     end


end
end
end

Ответы [ 3 ]

2 голосов
/ 31 января 2011

У вас было слишком много end.Посмотрите, работает ли это:

# == Schema Information
# Schema version: <timestamp>
#
# Table name: users
#
#  id         :integer         not null, primary key
#  name       :string(255)
#  email      :string(255)
#  created_at :datetime
#  updated_at :datetime
require 'digest'

class User < ActiveRecord::Base  
  attr_accessor :password
  attr_accessible :name, :email, :password, :password_confirmation

  email_regex = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i


  validates :name,
            :presence => true,
            :length   => { :maximum => 50 }

  validates :email, 
            :presence   => true,
            :format     => { :with => email_regex },
            :uniqueness => { :case_sensitive => false }

  validates :password, 
            :presence     => true,
            :confirmation => true,
            :length       => { :within => 6..40 }

  before_save :encrypt_password

  def has_password?(submitted_password) 
    encrypted_password == encrypt(submitted_password)  
  end  

  private

  def encrypt_password
   self.salt = make_salt if new_record?
   self.encrypted_password = encrypt(password)
  end

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

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

  def secure_hash(string)
   Digest::SHA2.hexdigest(string)
  end

end

К вашему сведению: хорошая практика - поддерживать чистоту и упорядоченность форматирования, чтобы его было легче читать.

2 голосов
/ 31 января 2011
# == Schema Information
# Schema version: <timestamp>
#
# Table name: users
#
#  id         :integer         not null, primary key
#  name       :string(255)
#  email      :string(255)
#  created_at :datetime
#  updated_at :datetime

require 'digest'

class User < ActiveRecord::Base  
  attr_accessor :password
    attr_accessible :name, :email, :password, :password_confirmation

  email_regex = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i

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

    before_save :encrypt_password

    def has_password?(submitted_password) 
      encrypted_password == encrypt(submitted_password)  
    end  


  private

     def encrypt_password
       self.salt = make_salt if new_record?
       self.encrypted_password = encrypt(password)
     end

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

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

     def secure_hash(string)
       Digest::SHA2.hexdigest(string)
     end
end

Ваш конец был перед всеми объявлениями методов.

0 голосов
/ 31 января 2011

Если это все строки кода внутри вашего user.rb, то у вас есть 3 лишних end, и вы неправильно завершили свой класс пользователя ......

Блок кодов из before_save до последнего определенного метода должно быть внутри класса User.

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