为什么log_in辅助方法在Hartl教程中有效?

时间:2015-03-15 20:45:58

标签: ruby-on-rails

以下是app / helpers

中Hartl教程中的帮助方法log_in
module SessionsHelper

  # Logs in the given user.
  def log_in(user)
    session[:user_id] = user.id
  end
end

在控制器中,我们称之为:

  def create
    user = User.find_by(email: params[:session][:email].downcase)
    if user && user.authenticate(params[:session][:password])
      log_in user
      redirect_to user
    else
      flash.now[:danger] = 'Invalid email/password combination'
      render 'new'
    end
  end

为什么这样做?该方法似乎是一个实例方法,但谁是创建操作中方法的接收者?

2 个答案:

答案 0 :(得分:2)

在控制器的实例上调用此方法。控制器在HTTP请求流期间实例化。 SessionsController包含SessionsHelper模块的方法。尝试稍微重命名方法的名称,并在SessionsController log_inn而不是log_in中调用,您将看到与undefined method 'log_inn' for #<SessionsController:0x1047d4825>类似的内容。所以你看到receiver是SessionsController类的实例。

答案 1 :(得分:0)

login方法&#34;工作&#34;只需将user_id分配给会话变量即可。会话在请求之间保持不变,用于确定用户是否已登录。有关会话的更多信息,请参阅此导轨指南:http://guides.rubyonrails.org/security.html#sessions