我有一个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
阻止了这一点。
答案 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) }) %>