0

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

我想创建一个 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 回答