我正在尝试执行以下操作:
module ApplicationHelper
class PModuleHelper
include ActionView::Helpers::TagHelper
def heading(head = "", &block)
content = block_given? ? capture(&block) : head.to_s
content_tag :h3, content, :class => :module_header
end
end
def getmh
PModuleHelper.new
end
end
为方法heading
或块提供字符串(或符号)。
在视图中:
<% mh = getmh %>
<%= mh.heading :bla %> // WORKS
<%= mh.heading do %> // FAILS
test 123
<% end %>
(请注意getmh
仅适用于此示例,PModuleHelper
由我的应用程序中的其他进程返回,因此无需对此进行评论或建议heading
正常的辅助方法,而不是类方法)
不幸的是我总是收到以下错误:
wrong number of arguments (0 for 1)
带有capture(&block)
来电的亚麻布。
如何在自己的助手类中使用capture
?
答案 0 :(得分:13)
我会做这样的事情:
module Applicationhelper
class PModuleHelper
attr_accessor :parent
def initialize(parent)
self.parent = parent
end
delegate :capture, :content_tag, :to => :parent
def heading(head = "", &block)
content = block_given? ? capture(&block) : head.to_s
content_tag :h3, content, :class => :module_header
end
end
def getmh
PModuleHelper.new(self)
end
end
我不能保证这会有效,因为我有这个错误:undefined method 'output_buffer='
而不是你提到的错误。我无法复制你的。