【发布时间】:2012-05-30 11:10:29
【问题描述】:
我想将某个逻辑抽象为视图助手。在我看来,这个想法是能够做这样的事情:
<ul class="nav">
<% pages_for_section('over') do |page| %>
<li><%= page.menu_text %></li>
<% end %>
</ul>
我目前的方法是让这个助手像这样:
def pages_for_section(section_slug, &block)
out = []
pages_in_section = @pages.select { |p| p.section.slug == section_slug }
pages_in_section.each do |page|
out << yield(page)
end
return out
end
具体来说,out << yield(page) 部分困扰着我。它有效,但它似乎不是一个非常正确的 DRY 方式。因为,如果我想在我的视图中添加一个变量,我也需要将它添加到块帮助程序和 yield 调用中。
底线:我想将一个变量从我的页面迭代中注入到产生的块中。这是最佳做法还是有更好、更易读的替代方法?
理想情况下。我想做类似的事情:
<ul class="nav">
<% each_page_in_section('over') do %>
<li><%= page.menu_text %> <%= another_variable %></li>
<% end %>
</ul>
帮助器在概念上看起来像这样:
def pages_for_section(section_slug, &block)
pages_in_section = @pages.select { |p| p.section.slug == section_slug }
pages_in_section.each do |page|
another_variable = "I'm cool"
# the `page` and the `another_variable` variable will automatically
# be available/copied to the block
yield
end
end
谢谢。
【问题讨论】:
-
更新了我原来的帖子,希望能让我的问题更清楚一点。
标签: ruby-on-rails block yield helpers