0

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番目のテーブルを作成する必要がありますか?

4

2 に答える 2

1

たとえば、PersonとDaysの間にrefテーブルを作成して、それらが機能するかどうかに関係なく、Timeとフラグを含めることができます。

于 2013-02-06T20:43:51.017 に答える
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'sShiftsを繰り返します。

@person.shifts.each do |s|
 puts "#{@person.name} works on #{s.day} from #{s.start_time} to #{s.end_time}."
end

その日のPersonに2シフトを与えることで、単に「昼休み」をモデル化することを選択できます。たとえば、午前9時から午後7時まで働き、午後1時から1時間休む場合は、その日の午前9時から午後1時までと、午後2時から午後7時までのシフトを与えます。

于 2013-02-06T21:20:28.677 に答える