在Rails助手中传递参数哈希

时间:2012-03-11 08:40:04

标签: ruby-on-rails session helper

我有SessionsHelper,这是我定义current_user

的地方
module SessionsHelper
  def current_user
    @current_user ||= user_from_remember_token 
  end
  .
  .
  .
  private
  def user_from_remember_token
    User.authenticate_with_salt(*remember_token)
  end

  def remember_token
    cookies.signed[:remember_token] || [nil, nil]
  end
end

我的UsersController有一个before_filter :authenticate。此身份验证位于SessionsHelper,我在这里遇到了麻烦。

Rails为我处理所有Cookie,但我构建了一个API来为我的移动应用程序使用令牌,我必须在登录时发送params[:api_token]并设置current_user

我想我必须做类似的事情:

def current_user
  @current_user ||=(user_from_remember_token || user_from_api_token)
end

但我被困了,因为我不确定我是否可以通过助手中的params[:api_token]

有人能指出我正确的方向吗?

编辑:我也有,

class ApplicationController < ActionController::Base
  protect_from_forgery

  include SessionsHelper

  ...
end

允许我使用before_filter:从UsersController进行身份验证并在SessionsHelper中访问此方法

2 个答案:

答案 0 :(得分:2)

如果您在 UsersController 包含 SessionsHelper SessionsHelper 中定义的方法应该可以访问 PARAMS

答案 1 :(得分:0)

如果你在帮助器中定义了一些应该可供所有视图使用的东西,那么你应该把它放到ApplicationHelper中。

另外,我想你会想在某些时候在你的控制器中使用这些方法。因此,您确实应该在ApplicationController中定义它们,然后使用helper_method函数将它们标记为辅助方法。

以下是一个例子:

class ApplicationController < ActionController::Base
  protect_from_forgery

  before_filter :authenticate

  private

  def authenticate
    redirect_to root_url, :alert => 'You must log in to access this page' unless current_user
  end

  def current_user
    @current_user ||= User.find_by_auth_token(cookies[:auth_token]) if cookies[:auth_token]
  end
  helper_method :current_user
end

因此无需在任何地方传递params,因为ApplicationController可以直接访问它。