RAILS:从lib类中访问当前控制器

时间:2017-06-27 21:44:06

标签: ruby-on-rails ruby

在我的控制器中我有:

@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可能是一个模块而不是一个类?我错过了一些东西......

1 个答案:

答案 0 :(得分: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很棒,你将学习如何让你的主持人真正渲染一些东西。