Группировка вывода данных из БД


(Анатолий Ступин) #1

Всем привет!
В rails я новичок.

Пишу первое приложение - делаю функционал расписания для клуба йоги.

Задача:

  1. Сгруппировать вывод расписания по дням недели
  2. Сортировка внутри каждого дня по времени

В целом, сортировку по времени я сделал, не знаю только, как сгруппировать вывод по дням недели.

Сейчас в таблице с расписанием есть колонка “День недели”, то есть день недели указан в каждой строке.

Хотелось бы ее убрать, и сделать следующим образом:
Заголовок - Понедельник, снизу расписание только на этот день, затем
Заголовок - Вторник, под ним таблица только на вторник, и так далее…

Вот мой код:

  1. index.html.erb
    <table class="table">
      <thead>
      <tr>
        <td>День недели</td>
        <td>Начало занятия</td>
        <td>Окончание занятия</td>
        <td>Класс</td>
        <td>Инструктор</td>
        <th colspan="3"></th>
      </tr>
      </thead>

      <tbody>
      <% @yoga_schedules.each do |yoga_schedule| %>
        <tr>
          <td><%= YogaSchedule::DAYS[yoga_schedule.day.to_i] %></td>
          <td><%= yoga_schedule.start_time.strftime("%H:%M") %></td>
          <td><%= yoga_schedule.end_time.strftime("%H:%M") %></td>
          <td><%= yoga_schedule.yoga_class.title %></td>
          <td><%= yoga_schedule.instructor.first_name %></td>
          <td><%= link_to '<i class="fa fa-eye"></i>'.html_safe, yoga_schedule %></td>
          <td><%= link_to '<i class="fa fa-edit"></i>'.html_safe, edit_yoga_schedule_path(yoga_schedule), remote: true %></td>
          <td><%= link_to '<i class="fa fa-remove"></i>'.html_safe, yoga_schedule, method: :delete, data: { confirm: 'Вы уверены?' } %></td>
        </tr>
      <% end %>
      </tbody>
    </table>
  1. Модель yoga_schedule.erb
class YogaSchedule < ApplicationRecord
  belongs_to :place
  belongs_to :instructor
  belongs_to :yoga_class

  DAYS = { 1 => 'Понедельник', 2 => 'Вторник', 3 => 'Среда', 4 => 'Четверг', 5 => 'Пятница', 6 => 'Суббота', 7 => 'Воскресенье' }

  def self.schedule
    order("day asc").order("start_time asc")
  end
end
  1. Часть контроллера yoga_schedules с экшном index
class YogaSchedulesController < ApplicationController
  before_action :set_yoga_schedule, only: [:show, :edit, :update, :destroy, :edit]

  def index
    @yoga_schedules = YogaSchedule.all.schedule
  end

Добра и лучшей кармы тем, кто откликнется!)
Заранее благодарю.
Буду рад любой критике/советам по коду.


(Анатолий Ступин) #2

Вопрос решил.