我想做以下操作:
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
并获取其行号?
content_tag
也必须被委托(在我更新的原始问题中,我包括了帮助程序)!然后一切都可以正常工作。而且似乎非常合乎逻辑,这就是为什么它能够正常工作! - Markusdelegate :capture, :content_tag, :to => :parent
更符合 Rails 的风格 ;-) - Markus