0

Trip オブジェクトを装飾する TripDecorator があります。トリップには多くのアクティビティがあります。

特定の Trip に属するアクティビティのリストを生成する TripDecorator メソッドを作成したいと考えています。

これを変換するにはどうすればよいですか:

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

これに:

<%= @trip.activities_list %>

アクティビティが存在しない場合は、何も表示されないようにします。この抽象化は Draper で可能ですか?

4

1 に答える 1

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してマークアップを生成するだけで、ループするアクティビティがない場合はメソッドを短絡できます。

于 2012-10-01T19:01:54.977 に答える