如何循环与Draper装饰器方法的关联?

时间:2012-10-01 18:57:44

标签: ruby-on-rails draper

我有一个装饰Trip对象的TripDecorator。旅行有很多活动。

我想创建一个TripDecorator方法,该方法生成属于特定Trip的活动列表。

我该如何转换:

<h5>Activities</h5>
<ul>
<% @trip.activities.each do |activity| %>
  <%= content_tag :li, activity.name %>
<% end %>
</ul>

到此:

<%= @trip.activities_list %>

如果没有活动,我不想出现任何事情。 Draper可以实现这种抽象吗?

1 个答案:

答案 0 :(得分:0)

当然,这是微不足道的。

class TripDecorator
  decorates :trip

  def activities_list
    return if activities.empty?
    h.content_tag(:h5, "Activities") +
    h.content_tag(:ul) do
      activities.map do |activity|
        h.content_tag(:li, activity.name)
      end.join
    end.html_safe
  end
end

您最终会连接content_tag次调用以生成标记,如果没有任何活动要循环,您可以将方法短路。

相关问题