【问题标题】:Ruby on Rails question how do you stop Total time duration from appearing multiple times per dayRuby on Rails 问题如何阻止 Total time duration 每天出现多次
【发布时间】:2021-10-12 17:15:44
【问题描述】:

您好,我正在 Rails 中创建一个会议时间保持应用程序,但我遇到了出现多天的总持续时间条目的问题,无论如何要让总数每天出现一次吗?我正在使用 Rails 6.0.4

我的 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 %>

我的模特会议.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

有谁知道每天显示一次总持续时间的简单方法?任何帮助将不胜感激

【问题讨论】:

  • 带有 btn-warning 类的按钮需要位于 meetings.each do |meeting| 块的 end 之后。它位于块内,因此每次会议都会出现。
  • 嗨 Les 感谢您的建议,当我移动该按钮时,我收到以下错误,并且没有任何建议对我有用.....未定义的局部变量或方法 `meeting' 用于 #:0x00007fc8f813b168> 你的意思是?会议@meeting @meetings
  • 我不确定你的意图。也许您正在寻找呈现daily_total_duration 方法的值。此方法应在 Meeting 类上定义,例如 def self.daily_total_duration(不是该类的实例),您需要将日期传递给您希望计算总数的方法。然后在控制器中,定义一个类似@day_total = Meeting.daily_total_duration(date)的变量,并渲染黄色按钮中返回的值。

标签: ruby-on-rails ruby datetime time


【解决方案1】:

由于您在 each 块内呈现总持续时间,因此它会出现与一天中的会议次数一样多的次数。在您的示例中,一天有 2 次会议,因此总持续时间会显示两次。

我们先在Meeting上写一个类方法daily_total_duration,它接受一个日期,并返回当天所有会议的总时长:

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 %>

【讨论】:

  • 嗨 3minus1 感谢您的回答,当我使用您的代码并将按钮放在倒数第二个 下时,您的回答有效吗?您可以更新您的回答,我会标记为正确吗?再次感谢您的帮助。
  • @SarahDuffy 感谢您指出错误。我已经编辑了答案。
  • 谢谢你的帮助我真的很感激
  • 很高兴我能帮上忙 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-03
  • 2011-11-08
  • 2015-12-15
  • 1970-01-01
  • 2016-02-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多