【问题标题】:RAILS: Accessing the current controller from inside a lib classRAILS:从 lib 类内部访问当前控制器
【发布时间】:2017-06-27 21:44:06
【问题描述】:

在我的控制器中,我有:

@list = ListView.new()

模板包含:

= @list.render

lib/list_view.rb 我有:

class ListView

    def render
        controller_name.inspect
    end

end

当我运行此代码时,我收到 undefined local variable or method 'controller_name' 错误。我还是 Rails 的新手,但我确信有办法做到这一点,就像 will_paginate 在这里做的那样:https://github.com/mislav/will_paginate/blob/master/lib/will_paginate/view_helpers/action_view.rb#L92

看来 will_paginate 可能是一个模块而不是一个类?我错过了一些东西......

【问题讨论】:

  • 不同之处在于will_paginate 代码是包含在具有控制器实例变量的类中的mixin。您正在创建一个没有与您正在调用的变量名称匹配的任何现有变量的类,这就是您获得未定义变量名称的原因。将控制器传递给类的构造函数是解决此问题的一种方法。

标签: ruby-on-rails ruby


【解决方案1】:

你可能想做这样的事情:

class ListView

    def initialize(controller)
      @controller = controller
    end

    def render
      controller_name.inspect
    end

  private 

    def controller()   @controller    end

    def controller_name
      controller.controller_name
    end

end

然后在你的控制器中,执行:

@list = ListView.new(self)

我猜你会选择演示者模式。如果是这样,您将希望观看 Ryan Bates 精彩的 RailsCast 主题,您将在其中学习如何让您的演示者实际渲染某些东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多