2013-02-06 45 views
0

我有一張桌子Schedules我可以在那裏儲存一天的工作工作。現在我想添加這個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

你好@GSP,你能分享一下你對這個問題的看法嗎? – evanx

回答

1

我認爲建模一個人的工作安排將更好地工作,作爲一個一對多:

Person 
    has_many :shifts 
end 

Shift 
    #fields person_id, day, start_time, end_time 
    belongs_to :person 
end 

然後,從上午9點至下午6點創建你描述(「星期一至五上午九時至11時的計劃,週二,等等......「):

@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.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點,讓他們上班。

1

您可以在Person和Days(例如)之間創建一個ref表,其中包括時間和標誌,以便他們工作或不工作。