Rails:使 Devise 助手在模块中可用(通常在控制器外部)

Rails: Make Devise helpers available in modules (generically outside a controller)

我正在使用 Rails 4.1.

进行开发

我有以下模块(在 app/policies/model_filters/helpers.rb 中:

module ModelFilters
  module Helpers
    def allow(record, action)
    end
  end
end

我把它包含在我的 app\controllers\application_controller.rb:

class ApplicationController < ActionController::Base
  include ModelFilters::Helpers

在 class 我想使用它们的地方 (app\bar\foo.rb):

class Foo
  include ModelFilters::Helpers

方法被正确包含,但 Devise helpers 似乎在上述模块中不可用;当我开始我的规格测试时,我得到:

undefined local variable or method 'current_user' for #<Foo...
# ./app/policies/model_filters/helpers.rb:5:in `allow'
# ./app/bar/foo:13:in `recent'

您知道如何让 Devise 助手在模块中或通常在控制器外部可见吗?

谢谢!

设计助手仅在控制器中可用,因为它们仅在调用操作的上下文中才有意义。

如果您考虑 Foo class,current_user 的真正含义是什么?在控制器中,current_user 是 Devise 可以从存储在 session.

中的数据中找到的用户对象

如果您需要在不同的 class 中使用用户对象,最好将用户传递给您正在调用的 class 或方法。