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

时间:2015-01-19 09:23:40

标签: ruby-on-rails ruby ruby-on-rails-4 devise helpers

我正在使用 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

在我想要使用它们的课程中(app\bar\foo.rb):

class Foo
  include ModelFilters::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助手?

谢谢!

1 个答案:

答案 0 :(得分:3)

设计助手只能在控制器中使用,因为它们只在被调用的动作的上下文中有意义。

如果您考虑一下Foo课程,current_user真正意味着什么?在控制器中,current_user是Devise可以从session中存储的数据中找到的用户对象。

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