0

我有Shift模型。

--- !ruby/object:Shift
attributes:
  id:
  starts_at:
  ends_at:

我想添加 singelton 方法来为给定季度的每一天创建班次。

class Shift

  def self.open_quarter(number, year)
    starts_at = "08:00"
    ends_at = "08:00"

    ...
  end
end

如何以最佳方式实施?我希望每个班次从早上 8 点开始并在第二天早上 8 点结束。

4

2 回答 2

1
def self.open_quarter(number, year)
  starts_at = "08:00 am"
  ends_at = "08:00 pm"

  quarter_start = Date.new(year, (number * 3)).beginning_of_quarter
  quarter_end = Date.new(year, (number * 3)).end_of_quarter

  (quarter_end - quarter_start).to_i.times do |n|
    start_shift = "#{(quarter_start + n).to_s} #{starts_at}".to_datetime
    end_shift = "#{(quarter_start + n).to_s} #{ends_at}".to_datetime

    Shift.create(starts_at: start_shift, ends_at: end_shift)
  end
end
于 2013-10-21T12:43:42.737 回答
1
def self.open_quarter(number, year)   
 start_time = Time.new(year, number*3 - 2, 1, 8) 

  while start_time.month <= number*3 && start_time.year == year
      Shift.create{starts_at: start_time, ends_at: start_time += 24.hours}
  end
end

确保在使用时设置正确的时区Time.new。默认为当前时区(请参阅文档)。您也可以使用Time.utc.

于 2013-10-21T12:54:54.513 回答