如何从config/routes.rb文件中的助手模块中调用一种方法



我正在使用rails 5.如何使我的confnig/doutes.rb文件识别我在辅助模块中定义的函数?在我的app/helpers/sessions_helper.rb文件中,我有

  # Returns true if the user is logged in, false otherwise.
  def logged_in?
    !current_user.nil?
  end

,然后在我的config/doutes.rb文件中我有

 get '/', to: 'users#show',  constraints: lambda { |request| SessionsHelper.logged_in? }

但是,加载我的应用程序后,我会收到错误

undefined method `logged_in?' for SessionsHelper:Module

从我的模块调用辅助方法的正确方法是什么?

您无法执行此操作,您不应该这样做。您的路由文件没有存储当前用户授权的会话概念,由您的控制器之后提供了一个路由,并且已选择了正确的控制器。无论如何,授权不属于您的路线文件中的约束。

如果您的current_user未设置为预期值,则您的控制器应负责渲染422"未经授权"。在before_action回调中执行此操作。

class UsersController < ApplicationController
  before_action :require_login
  # ...
  protected
  def require_login
    redirect_to login_path unless current_user
  end
end

通常,您通常将require_login功能和before_action回调放在ApplicationController中,然后选择性地,不需要使用skip_before_action进行身份验证的白名单控制器。许多宝石已经存在,可以提供此确切的设置,并具有大量的额外功能。例如,请参见设计。

您是否使用设计?如果是,那么您应该这样做:

authenticated 
  get '/', to: 'users#show'
end

设计代码中的更多详细信息:https://github.com/plataformatec/devise/blob/master/lib/lib/devise/rails/rails/ROUTES.RB#L294

最新更新