Консоль Rails не может найти записи с помощью метода класса

Я совершенно сбит с толку. Я изучаю Rails 4, и это возвращает пользовательские записи, как и ожидалось:

irb(main):002:0> User.all

Но это возвращает nil

irb(main):004:0> User.authenticate('asdfdsf', 'asdfdas')

Вот метод класса в модели:

def self.authenticate( email, password )
    user = User.all #( email: email )
    puts user
    # if user && (user.hashed_password == User.hash_with_salt( password, user.salt ) )
    #   return user
    # else
    #   return false
    # end
end

Я что-то упускаю? Разве они оба не должны возвращать одно и то же? Почему я не могу вернуть пользовательский объект с помощью .find() или .where() внутри метода класса?

Обновление: вот схема моей таблицы пользователей:

  create_table "users", force: true do |t|
    t.string   "first_name"
    t.string   "last_name"
    t.string   "email"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.string   "hashed_password"
    t.string   "salt"
  end

person emersonthis    schedule 27.08.2013    source источник
comment
что можно сделать с relaod!?   -  person emersonthis    schedule 27.08.2013
comment
неважно. :) Я опубликовал свой ответ.   -  person Marek Lipka    schedule 27.08.2013


Ответы (1)


Нет. Было бы, если бы не было строки puts user. Вызов puts возвращает nil, и он возвращается из всего метода как последнее оцененное значение.

person Marek Lipka    schedule 27.08.2013
comment
Спасибо. Я возвращаю объект сейчас. Но я запутался, потому что, когда я пытаюсь вызвать один из его методов... u = User.authenticate.first; u.hashed_password, я получаю ошибку неопределенного метода: undefined method 'hashed_password' - person emersonthis; 27.08.2013
comment
@Emerson, ты выполнил миграцию? Какая у вас схема БД? - person Marek Lipka; 27.08.2013
comment
Я добавил это к вопросу. Я заметил, что нет индекса. Это имеет значение? - person emersonthis; 27.08.2013
comment
@ Эмерсон, что возвращает User.new.hashed_password? - person Marek Lipka; 27.08.2013
comment
Если я делаю u = User.find(1), я возвращаю пользовательский объект с длинной строкой вместо salt: , но когда я сразу после этого делаю u.salt, я получаю nil - person emersonthis; 28.08.2013
comment
Я понял. Я случайно повторно объявил attr_accessor :hashed_password, и это создавало странности. - person emersonthis; 28.08.2013