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

时间:2016-12-15 20:03:35

标签: ruby-on-rails routes config ruby-on-rails-5 helper

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

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

然后在我的config / routes.rb文件中

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

但是在加载我的应用程序时,我收到了错误

undefined method `logged_in?' for SessionsHelper:Module

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

2 个答案:

答案 0 :(得分:3)

你不能这样做,你不应该这样做。您的路线文件没有存储当前用户授权的会话概念,您的控制器选择了路径后提供了正确的控制器实例化。无论如何,授权都不属于您的路径文件中作为约束。

您的控制器应负责呈现422"未经授权的"如果您的current_user未设置为预期值。在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身份验证的控制器列入白名单。已经存在许多提供这种精确设置的宝石,具有大量额外功能。例如,请参阅Devise

答案 1 :(得分:0)

你使用Devise吗?如果是,那么你应该这样做:

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

Devise代码中的更多详细信息:https://github.com/plataformatec/devise/blob/master/lib/devise/rails/routes.rb#L294