Вопрос о Ruby on Rails, как предотвратить появление общей продолжительности времени несколько раз в день

avatar
Sarah Duffy
8 августа 2021 в 21:13
47
1
0

Здравствуйте, я создаю приложение для хранения времени встречи в rails, и у меня возникла проблема с записью общей продолжительности, появляющейся в течение нескольких дней. Есть ли возможность отображать общую продолжительность один раз в день? Я использую Rails 6.0.4

enter image description here

enter image description here

мой файл index.html

<%= month_calendar events: u/meetings do |date, meetings| %>

<%= date %>

<% meetings.each do |meeting| %>

<div class="primary">

<button type="button" class="btn btn-success"> <%= Time.at(meeting.start_time).utc.strftime("%I:%M %P") %></button>

<button type="button" class="btn btn-danger"> <%= Time.at(meeting.end_time).utc.strftime("%I:%M %P") %></button>

<button type="button" class="btn btn-warning" ><%= Time.at(meeting.daily_total_duration).utc.strftime("%H hrs & %M mins ") %></button>

</div>

<% end %>

<% end %>

моя модель Meeting.rb

class Meeting < ApplicationRecord

before_save :set_duration

def set_duration

self.duration = (end_time - start_time).to_i

end

def daily_total_duration

Meeting.where("start_time >= ? AND end_time < ?", self.start_time.beginning_of_day, self.end_time.end_of_day).sum(:duration)

end

end

Кто-нибудь знает простой способ, чтобы общая продолжительность отображалась один раз в день? Будем очень признательны за любую помощь

Источник
Les Nightingill
8 августа 2021 в 22:16
0

Кнопка с классом btn-warning должна быть после end блока meetings.each do |meeting|. Он находится внутри блока, поэтому он появляется для каждой встречи.

Sarah Duffy
8 августа 2021 в 22:42
0

Привет, Лес, спасибо за предложение, когда я переместил эту кнопку, я получаю следующую ошибку, и ни одно из предложений не работает для меня ..... неопределенная локальная переменная или метод «встреча» для #<#<Class:0x00007fc8f8142198>:0x00007fc8f813b168> Вы имеете в виду? встречи @встречи @встречи

Les Nightingill
8 августа 2021 в 23:32
0

Я не уверен в ваших намерениях. Возможно, вы хотите отобразить значение метода daily_total_duration. Этот метод должен быть определен в классе Meeting, например def self.daily_total_duration (не экземпляр этого класса), и вам нужно будет передать дату методу, для которого вы хотите вычислить общую сумму. Затем в контроллере определите переменную, например @day_total = Meeting.daily_total_duration(date), и отобразите значение, возвращаемое желтой кнопкой.

Ответы (1)

avatar
3minus1
9 августа 2021 в 05:14
1

Поскольку вы визуализируете общую продолжительность внутри блока each, она будет отображаться столько раз, сколько встреч в день. В вашем примере в день проводится 2 встречи, поэтому общая продолжительность отображается дважды.

Давайте сначала напишем метод класса daily_total_duration для Meeting, который принимает дату и возвращает общую продолжительность всех встреч в этот день:

class Meeting < ApplicationRecord
# rest of your code
#

  def self.daily_total_duration(date)
    Meeting.where("start_time >= ? AND end_time < ?", date.beginning_of_day, date.end_of_day).sum(:duration)
  end
end

Затем давайте обновим представление, чтобы отображать общую продолжительность только один раз в день:

<%= month_calendar events: u/meetings do |date, meetings| %>

  <%= date %>

  <% meetings.each do |meeting| %>

    <div class="primary">
      <button type="button" class="btn btn-success"> <%= Time.at(meeting.start_time).utc.strftime("%I:%M %P") %></button>
      <button type="button" class="btn btn-danger"> <%= Time.at(meeting.end_time).utc.strftime("%I:%M %P") %></button>
    </div>

  <% end %>
  
  <button type="button" class="btn btn-warning" ><%= Time.at(Meeting.daily_total_duration(date)).utc.strftime("%H hrs & %M mins ") %></button>

<% end %>
Sarah Duffy
9 августа 2021 в 12:05
1

Привет, 3minus1, спасибо за ваш ответ, который сработал, когда я использовал ваш код и поместил кнопку под предпоследним <% end %>, можете ли вы обновить свой ответ, и я отмечу это правильно? В очередной раз благодарим за помощь.

3minus1
9 августа 2021 в 13:10
0

@SarahDuffy Спасибо, что указали на ошибку. Я отредактировал ответ.

Sarah Duffy
9 августа 2021 в 13:11
0

Спасибо за вашу помощь, я очень ценю это

3minus1
9 августа 2021 в 13:12
1

Рад, что смог быть полезен :)