我有一个装饰Trip对象的TripDecorator。旅行有很多活动。
我想创建一个TripDecorator方法,该方法生成属于特定Trip的活动列表。
我该如何转换:
<h5>Activities</h5>
<ul>
<% @trip.activities.each do |activity| %>
<%= content_tag :li, activity.name %>
<% end %>
</ul>
到此:
<%= @trip.activities_list %>
如果没有活动,我不想出现任何事情。 Draper可以实现这种抽象吗?
答案 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
次调用以生成标记,如果没有任何活动要循环,您可以将方法短路。