Rails 3.1 Mongoid has_secure_password - PullRequest
       3

Rails 3.1 Mongoid has_secure_password

6 голосов
/ 30 сентября 2011

Я пытаюсь заставить has_secure_password хорошо играть с mongoid.Я слежу за Railscasts # 270, однако, когда я захожу с именем пользователя / паролем, я получаю сообщение об ошибке:

undefined method `find_by_email' for User:Class

Я вижу похожий пост (однако http://stackoverflow.com/questions/6920875/mongoid-and-has-secure-password) сделал, как я и предложилвсе равно получаю ту же ошибку.

Вот моя модель:

class User 
  include Mongoid::Document
  include ActiveModel::SecurePassword 

  validates_presence_of :password, :on => :create
  attr_accessible :email, :password, :password_confirmation

  field :email, :type => String
  field :password_digest, :type => String
  has_secure_password
 end

Контроллер:

class SessionsController < ApplicationController

  def new
  end

  def create
    user = User.find_by_email(params[:email])
    if user && user.authenticate(params[:password])
      session[:user_id] = user.id
      redirect_to root_url, :notice => "Logged in!"
    else
      flash.now.alert = "Invalid email or password"
      render "new"
    end
  end

  def destroy
    session[:user_id] = nil
    redirect_to root_url, :notice => "Logged out!"
  end

end

Спасибо.

Ответы [ 2 ]

11 голосов
/ 30 сентября 2011

Вариант 1: в вашем контроллере вы должны использовать

user = User.where(:email => params[:email]).first

Вариант 2: в вашей модели вы должны определить

def self.find_by_email(email)
  where(:email => email).first
end
0 голосов
/ 30 сентября 2011

Mongoid не поддерживает методы find_by_attribute.

Вместо них лучше использовать where:

User.where(:email => email).all
...