Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите разобраться в модели 
:(
    Опции темы
DimanLin
Дата 18.1.2009, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 10.2.2008

Репутация: нет
Всего: нет



Код

class User < ActiveRecord::Base
 validates_presence_of :name                                                  
 validates_uniqueness_of :name, :message => "уже существует"

  validates_confirmation_of :password

  def validate
    errors.add_to_base("Пароль не введён") if hashed_password.blank?
  end

def password 
  @password
end

def password=(pwd)  
  @password = pwd
  create_new_salt
  self.hashed_password = User.encrypted_password(self.password, self.salt) 
end

def self.authenticate(name, password)
  user = self.find_bay_name(name)
  if user
    expected_password = encrypted_password(password, user.salt)
    if user.hashed_password != expected_password
      user = nil
    end
  end
  user
end

private
    def self.encrypted_password(password, salt)
      string_to_hash = password + "wibble" + salt
      Digest::SHA1.hexdigest(string_to_hash)
    end

    def create_new_salt
    self.salt = self.object_id.to_s + rand.to_s
  end
  
end


У меня несколько вопросов.

1.

def password 
  @password
end
Что это значит?

2. Что значит self.

3.
Как всё это происходит после контроллера, который содержит строки:
@user = User.new(params[:user])
@user.save
Где в модели происходит первый вызов которая хеширует пароль? И почему происходит этот вызов?
PM MAIL   Вверх
shine
Дата 18.1.2009, 23:24 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 20.10.2006

Репутация: 2
Всего: 5



1. @password - это член экземпляра класса User. Этот член недоступен вне класса. Для доступа к значению этой переменной создан метод password

2. Значение self зависит от контекста. Если self применяется в названии метода то этот метод будет методом класса а не методом экземпляра класса.
Внутри метода значение self тоже зависит от контекста. Если метод - метод экземпляра, то self указывает на экземпляр. Если метод - метод класса, то self указывает на класс.

3. Ничего не буду говорить. У человека который писал такой код должны были быть очень веские причины писать его именно таким образом. Лучше спросите у автора.
--------------------
An investment in knowledge always pays the best interest. © Benjamin Franklin
PM MAIL   Вверх
kronos_vano
Дата 19.1.2009, 08:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 13.7.2007

Репутация: нет
Всего: нет



где: def password=
почему: потому что @user = User.new(params[:user])
это я так понял плагин restful_authentification...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Ruby on Rails"
source777
  • С чего начать? начинаем
  • Документацию смотрим тут
  • Обязательно следуйте правилам Vingrad.
  • Пожалуйста, прочитайте рекомендации по работе в форуме и навигации по Vingrad.
  • Для вставки кодов Ruby используйте тег: [code=ruby]код[/code]. Когда в будущем подсветка синтаксиса для Ruby будет реализована, весь исходных код преобразится.
  • Используйтe чекбокс "Транслит" (возле кнопок кодов), если у Вас нет русских шрифтов.
  • Помните, для каждого вопроса должна быть своя тема.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, source777.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Ruby On Rails | Следующая тема »


 




[ Время генерации скрипта: 0.0476 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.