问题描述:

I have Shift model.

--- !ruby/object:Shift

attributes:

id:

starts_at:

ends_at:

I want to add singelton method to create shifts for each day in given quarter.

class Shift

def self.open_quarter(number, year)

starts_at = "08:00"

ends_at = "08:00"

...

end

end

How to implement that in best way? I want that each shifts starts_at 8.00 am and finish 8.00 am on next day.

网友答案:
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

make sure to set the correct timezone when using Time.new. Default is current timezone (see docs). You can also use Time.utc.

网友答案:
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
相关阅读:
Top