0

私はシフトモデルを持っています。

--- !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)   
 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ください。デフォルトは現在のタイムゾーンです ( docsを参照)。も使用できますTime.utc

于 2013-10-21T12:54:54.513 に答える
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 に答える