我有一张表Schedules
,我可以在那里存储一天Person
作品。现在我想添加Person
工作的小时数。假设Person
周一上午9点到11点,周二上午9点到下午6点,等等......
同样在每个日期范围内(从start_time到end_time)我如何设置人员不像午餐时间那样工作的时间?
create_table "schedules", :force => true do |t|
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.integer "person_id"
t.boolean "sun"
t.boolean "mon"
t.boolean "tue"
t.boolean "wed"
t.boolean "thu"
t.boolean "fri"
t.boolean "sat"
end
我应该创建第二个表来存储每天的小时数吗?
答案 0 :(得分:1)
您可以在Person和Days(例如)之间创建一个ref表,该表包括时间和标志,无论它们是否工作。
答案 1 :(得分:1)
我认为对一个人的工作时间表进行建模会更好地作为一对多:
Person
has_many :shifts
end
Shift
#fields person_id, day, start_time, end_time
belongs_to :person
end
然后,创建你描述的时间表('星期一上午9点到11点,星期二上午9点到下午6点,依此类推......'):
@person = Person.find(1)
@person.shifts.create!(:day => 'mon', :start_time => '9 am', :end_time => '11 am')
@person.shifts.create!(:day => 'tue', :start_time => '9 am', :end_time => '6 pm')
当您想要显示此信息时,只需遍历Person's Shifts:
@person.shifts.each do |s|
puts "#{@person.name} works on #{s.day} from #{s.start_time} to #{s.end_time}."
end
您可以选择简单地为“午餐休息时间”建模,为当天的人员提供两班制。例如,如果他们从上午9点到晚上7点工作,下午1点开始休息一小时,那么当天从早上9点到下午1点,从下午2点到晚上7点,他们轮班。