【问题标题】:How to loop through association with a Draper decorator method?如何循环通过与 Draper 装饰器方法的关联?
【发布时间】:2012-10-01 18:57:43
【问题描述】:

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

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

如何转换:

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

到这里:

<%= @trip.activities_list %>

如果不存在任何活动,我不希望出现任何内容。使用 Draper 可以实现这种抽象吗?

【问题讨论】:

    标签: ruby-on-rails draper


    【解决方案1】:

    当然,这很简单。

    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 调用来生成您的标记,如果没有任何活动要循环,您可以短路该方法。

    【讨论】:

    • 谢谢。这正是我一直在寻找的。为了防止
    • 标签出现,地图块需要 'end.join.html_safe'
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签