我对应该在我的应用程序中设置哪种类型的关联感到有点困惑。
我有以下三种模式:预订,可用性和设施
设施提供1小时的可用时间块。所以我会说Availability: belongs_to :facility
。
我试图表示预订可能有很多可用性。如果我从下午3点开始预订两个1小时的时间段,我希望能够在预订表中的1条记录中表示。
我在想我应该设置Bookings: has_many :availability
但后来我正在阅读has_many though
并且我不确定是否更适合做设施有很多预订可用性......?
答案 0 :(得分:2)
我绝对会在这里做has_many :through
个关联,但我会将Availability
和Booking
之间的关联与典型的has_many :through
关联略有不同:< / p>
class Facility < ActiveRecord::Base
has_many :availabilities
has_many :bookings, through: :availabilities
end
class Availability < ActiveRecord::Base
belongs_to :facility
has_one :booking
end
class Booking < ActiveRecord::Base
belongs_to :availability
end
我更喜欢这种关联风格的原因是因为在典型的has_many :through
中,您有两个实体通过第三个实体彼此分享关系(例如,患者和医生共享关系through
一个名为Appointment
,正如Rails guides所解释的那样。但是,此示例不同,因为Booking
不应与Facility
保持任何正面关系 - 这种关系应仅仅是开放Availability
的副产品。< / p>