rails / ruby​​,传递多个块作为参数

时间:2015-11-24 19:26:06

标签: ruby-on-rails ruby

我有一个rails helper方法,我希望在方法的两个不同位置传递两个不同的块。

这是我想要实现的目标..

    <%= collapsible_content do %>
      <%= page_heading venue.title %>
      <%- venues_facility_opening_times venue %>
    <%-end %>

这就是方法本身

  def collapsible_content(&block1, &block2)
    content_tag(:div, nil, class: 'collapsible-content', data: { name: 'collapsible-1' }) do
      content_tag(:div, nil, class: 'collapsible-content-item') do
        concat button_tag(yield &block1, class: 'collapsible-content-toggle')
        concat hidden_content(&block2)
      end
    end
  end

  private

  def hidden_content(&block)
    content_tag(:div, class: "collapsible-content-body") do
      content_tag(:div, yield) if block_given?
    end
  end

然而,从我的立场来看,&block始终是最后一个论点,那么如何区分它们的收益呢?

我尝试使用lambda,但ActiveSupport::SafeBuffer阻止了这一点。

1 个答案:

答案 0 :(得分:3)

也许这(2 Proc使用)?

定义:

def collapsible_content(proc1, proc2)
  content_tag(:div, some_options) do
    content_tag(:div, some_other_options) do
      concat button_tag(proc1.call)
      concat hidden_content(proc2.call)
    end
  end
end

def hidden_content(proc)
  content_tag(:div, class: "collapsible-content-body") do
    content_tag(:div, proc.call)
  end
end

用法:

<%= collapsible_content(Proc.new{ page_heading(venue.title) }, Proc.new{ venues_facility_opening_times(venue) }) %>

感谢此帖:Passing multiple code blocks as arguments in Ruby