如何捕获助手子类中的块?

时间:2011-08-27 17:27:27

标签: ruby-on-rails-3 ruby-on-rails-3.1 capture view-helpers

我正在尝试执行以下操作:

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

1 个答案:

答案 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='而不是你提到的错误。我无法复制你的。