【发布时间】:2015-08-19 01:24:58
【问题描述】:
我正在尝试对课程的发生与其时间表之间的关系进行建模。这就是我所拥有的:
class Schedule < ActiveRecord::Base
# Has attributes like
# :starts_at (time only, no date)
# :repeats_on (weekday name represented as integer)
# :type (the type of exercise that will be taught, say Spin, Kickboxing)
# :duration
has_many :occurrences
end
class Teacher < ActiveRecord::Base
has_many :occurrences
end
class Occurrence < ActiveRecord::Base
belongs_to :teacher
belongs_to :schedule
# Has attribute
# :occurs_on (date only, no time, time comes from schedule reference)
end
现在,如果我对“时间表”进行更改(例如,我将周三 Spin 课程的 starts_at 从下午 4:30 更改为下午 5:00),这将影响所有过去发生的“属于到”这个“时间表”。为了避免这种情况,我似乎需要这样做:每当用户编辑“时间表”时,将旧时间表标记为非活动,然后创建一个新时间表。这样,只有新的事件会指向这个新的时间表,而过去的不会受到影响。
这是建立这种关系的正确方法吗?
【问题讨论】:
-
您能否详细说明这将如何在应用程序中发挥作用?什么是用例场景?这将有助于我们了解数据的最佳结构方式。
-
例如,我不明白发生的实际代表什么以及为什么当计划时间改变时,发生变得无效。
-
每天,健身房都有许多课程,如旋转、普拉提等。这遵循每周的时间表或时间表。例如,周日下午 2:00 普拉提,下午 5:00 旋转,周一下午 5:00 有氧运动。现在,经理想为本月举行的课程分配教师。但是同一位老师并没有教授所有星期一下午 2:00 的课程。所以,我们需要区分日程类(没有日期信息,只有时间和工作日)和发生(有特定的日期和时间,还有其他属性,比如谁在教课)。
-
现在,一个事件指向一个时间表。例如,8 月 19 日星期一下午 2 点事件引用了星期一下午 2 点的时间表。如果在 8 月 20 日,更改了星期一下午 2 点的时间表,以便开始时间变为下午 3 点,则它不应影响指向它的 8 月 19 日下午 2 点课程。它应该只影响未来的事件。这是因为我不想在事件中存储时间表的所有属性,如开始时间、课程类型、持续时间等(因为这将是重复的)。由于过去的事件都指向一个时间表,所以我在编辑时需要小心。
-
好的,我明白了。我认为 MarsAtomic 有一个很好的答案,但我会给出另一个答案。
标签: ruby-on-rails associations rails-activerecord