【问题标题】:Rails: Grouping Partials Based on an AttributeRails:根据属性对部分进行分组
【发布时间】:2011-11-12 05:00:53
【问题描述】:

我有一个使用日历的应用程序,我想在登录时提供日历摘要。摘要的格式应使其显示今天、明天和本周的事件,如下所示:

活动:

今天

  • 事件 1

明天

  • 事件 2
  • 事件 3
  • 事件 4

本周

  • 事件 5
  • 事件 6
  • 事件 7
  • 事件 8

如何渲染部分,以便它们根据日期以正确的方式组合在一起?

【问题讨论】:

    标签: ruby-on-rails date calendar partial partials


    【解决方案1】:

    第一个可以添加一个模型方法 for_dates(start_date,end_date) 它将包含: where([:date_column >= ? and :date_column <= ?, start_date, end_date])

    然后使用:

    Model.for_dates(Date.today, Date.today)

    Model.for_dates(Date.today+1, Date.today+1)

    默认的“星期”是星期日到星期一。如果您希望不同的日子,请添加偏移量,例如

    周一到周五是

    Model.for_dates(Date.today.beginning_of_week+1, Date.today.end_of_week+1)

    【讨论】:

      【解决方案2】:

      假设您的模型称为 Event 并且它具有 date 属性,并且您的这些集合称为 @events,这里有一个想法:将其放在您的视图中...

      <ul>
      <%= render @events, locals: { events: @events } %>
      </ul>
      

      ...那么您将有一个名为 _event.html.erb 的部分,如下所示:

      <%  last_event = event_counter == 0 ? nil : events[event_counter - 1]
          next_event = events[event_counter + 1]
      %>
      <%  if last_event && last_event.date != event.date
          # add a new date header and start a new nested list of events
      %>
        <li><h3><%= event.date %></h3>
          <ul>
      <% end %>
      
            <li><%= link_to event %></li>
      
      <%  if next_event && next_event.date != event.date
          # end the nested list and make way for the next date header and set of events
      %>
          </ul>
        </li>
      <%  end %>
      

      正在发生的事情是在 render 调用中,我们将整个 @events 集合作为称为 events 的本地集合传递。然后在部分内部,我们使用自动生成的 event_counter 方法来查找集合中的前一个 (events[event_counter - 1]) 和下一个 (events[event_counter + 1]) 事件。然后,如果当前event 的日期与last_event 的日期不同(意味着它是该日期的第一个日期),我们将开始一个具有新日期标题的新集合,并且如果event 的日期不同从next_event 的日期开始(即它是该日期的最后一个),我们结束了这个集合。

      这有点难看,当然还有更优雅的方法可以做到这一点,但它可以完成工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-02-07
        • 2019-05-14
        • 2021-11-14
        • 1970-01-01
        相关资源
        最近更新 更多