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 或方法。
我正在使用 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 或方法。