RoR - ArgumentError in SessionsController#create wrong number of arguments (1 for 2)

十年热恋 提交于 2020-01-24 21:48:06

问题


I am new to RoR and I am following this tutorial on making a user authentication system from scratch: http://railscasts.com/episodes/250-authentication-from-scratch. I've been hung up on this error message all weekend:

ArgumentError in SessionsController#create: wrong number of arguments (1 for 2). 

Here is the code from my sessions controller:

class SessionsController < ApplicationController
  def new
  end

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

Here is the code from my user.rb model (The error message gives an extracted source on line #10 => def self.authenticate (email, password)

class User < ActiveRecord::Base

attr_accessor :password
validates_confirmation_of :password
validates_presence_of :email
validates_uniqueness_of :email
validates_presence_of :password, :on => :create # needed to move line up from below to. Cannot encrypt password without validating password
before_save :encrypt_password

def self.authenticate (email, password)
    user = find_by_email(email)
    if user && user.password_hash == BCrypt::Engine.hash_secret(password, user.password_salt)
        user
    else
        nil
    end
end

def encrypt_password
    if password.present?
        self.password_salt = BCrypt::Engine.generate_salt
        self.password_hash = BCrypt::Engine.hash_secret(password, password_salt)
    end
end     

end


回答1:


authenticate method in the model takes two parameters, but you're passing just one (a hash with two keys). Change it to:

User.authenticate(params[:email], params[:password])



回答2:


The problem is in this line:

user = User.authenticate(:email => params[:email], :password => params[:password])

it should be

user = User.authenticate(params[:email], params[:password])


来源:https://stackoverflow.com/questions/21221888/ror-argumenterror-in-sessionscontrollercreate-wrong-number-of-arguments-1-fo

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!