Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何循环与Draper装饰器方法的关联?_Ruby On Rails_Draper - Fatal编程技术网

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

Ruby on rails 如何循环与Draper装饰器方法的关联?,ruby-on-rails,draper,Ruby On Rails,Draper,我有一个TripDecorator装饰一个旅行对象。旅行有很多活动 我想创建一个TripDecorator方法,生成属于特定旅行的活动列表 如何将其转换为: <h5>Activities</h5> <ul> <% @trip.activities.each do |activity| %> <%= content_tag :li, activity.name %> <% end %> </ul> 活动

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

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

如何将其转换为:

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

<%= @trip.activities_list %>

如果没有活动,我不希望任何东西出现。德雷珀可以实现这种抽象吗?

当然,这很简单

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\u-tag
调用即可生成标记,如果没有任何活动可循环,则可以缩短该方法。

谢谢。这正是我想要的。为了防止出现
  • 标记,映射块需要“end.join.html\u safe”