Rails3 + Devise + Sign_in + Controller

时间:2014-07-22 23:29:01

标签: ruby-on-rails-3 devise

我有一个简单的控制器,我想手动记录用户,由于某种原因,设计方法sign_in不起作用

这是我的控制器:

class Brand::ChallengesController < ApplicationController

 def sign_in
  user = User.find_by_email(params[:email])
  if user and user.valid_password?(params[:password])
    sign_in(:user, user)
    redirect_to brand_challenges_url
  else
    ...
  end
end
...

编辑 我总是在sign_in方法上得到这个答案:

wrong number of arguments (2 for 0)

似乎我只能在设计子类中使用此方法。 我试图包括许多Devise助手,但目前没有任何工作。

1 个答案:

答案 0 :(得分:1)

def sign_in
  user = User.find_by_email(params[:email])
  if user and user.valid_password?(params[:password])
    sign_in(:user, user)
    ^^^^^^^

看到那条线。 您正在调用sign_in - 这是您刚刚编写的方法的名称。 这意味着您的代码正在调用自己......并且您的sign_in方法的参数为零。

(如果你带走了(:user, user)部分......你实际上会得到一个堆栈溢出 - 因为你的代码会调用自己......这会自称...自己一遍又一遍地直到记忆刚刚爆炸并死亡。)

您是否尝试调用一些名为sign_in其他方法?如果是的话 - 该方法位于何处?