【问题标题】:Rails: Make Devise helpers available in modules (generically outside a controller)Rails:使 Devise 助手在模块中可用(通常在控制器之外)
【发布时间】:2015-03-17 06:19:36
【问题描述】:

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

方法包含正确,但在上述模块中似乎没有 Devise 助手;当我开始我的规格测试时,我得到:

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 助手在模块中或通常在控制器外部可见吗?

谢谢!

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 你的回答真的很好,我的朋友。我在这个概念上苦苦挣扎,你是完全正确的。设计的东西应该远离我们的模块。
    • 很高兴我能帮到 João!
    猜你喜欢
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 2013-12-22
    • 2011-02-04
    • 2021-12-07
    • 1970-01-01
    • 2012-01-18
    相关资源
    最近更新 更多