在Rails中关联3个模型

时间:2015-07-03 19:55:43

标签: ruby-on-rails ruby ruby-on-rails-4 associations

我对应该在我的应用程序中设置哪种类型的关联感到有点困惑。

我有以下三种模式:预订,可用性和设施

设施提供1小时的可用时间块。所以我会说Availability: belongs_to :facility

我试图表示预订可能有很多可用性。如果我从下午3点开始预订两个1小时的时间段,我希望能够在预订表中的1条记录中表示。

我在想我应该设置Bookings: has_many :availability
但后来我正在阅读has_many though并且我不确定是否更适合做设施有很多预订可用性......?

1 个答案:

答案 0 :(得分:2)

我绝对会在这里做has_many :through个关联,但我会将AvailabilityBooking之间的关联与典型的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>