如何定义表格表?

时间:2013-02-06 20:26:27

标签: ruby-on-rails-3

我有一张表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  

我应该创建第二个表来存储每天的小时数吗?

2 个答案:

答案 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点,他们轮班。