gpt4 book ai didi

ruby-on-rails - rails/ruby,将多个 block 作为参数传递

转载 作者:太空宇宙 更新时间:2023-11-03 18:11:13 24 4
gpt4 key购买 nike

我有一个 Rails 辅助方法,我想传递两个不同的 block 以在该方法的两个不同位置产生。

在我看来,这就是我想要实现的目标。

    <%= 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 阻止了这种情况。

最佳答案

也许这个(使用了 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

关于ruby-on-rails - rails/ruby,将多个 block 作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33902132/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com