在我的控制器中我有:
@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可能是一个模块而不是一个类?我错过了一些东西......
答案 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很棒,你将学习如何让你的主持人真正渲染一些东西。