【问题标题】:Associating 3 Models in Rails在 Rails 中关联 3 个模型
【发布时间】:2015-07-03 19:55:43
【问题描述】:

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

我有这三个模型:预订、可用性和设施

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

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

我在想我应该设置Bookings: has_many :availability
但后来我读到了has_many though,我不确定是否更适合通过可用性进行设施有很多预订...?

【问题讨论】:

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


    【解决方案1】:

    我绝对会在这里做一个has_many :through 关联,但我会让AvailabilityBooking 之间的关联与典型的has_many :through 关联略有不同:

    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 的副产品。

    【讨论】:

    • 如果事情变得更复杂并且说我也有用户模型怎么办。我的 Bookings 模型已经有一个 belongs_to :user,添加 belongs_to :availability 可以吗?
    • 另外,我注意到您在可用性模型中有has_one :booking。但是,这不会阻止预订多个可用性吗?因此,如果我预订 3 个空房,它们是否可以与 1 个预订相关联?
    • 从面向对象的角度来看,这没有多大意义,不是吗?如果您有空房(例如,11-12 的房屋展示),您将通过 Fred 的单次预订来完成。您不会希望 Fred、Lisa 和 Tom 都出现在相同的可用性上——这会反驳设计理念。
    • 是的,我明白你的意思。我想我对如何在这里使用对象完成与如何在访问或实体关系工具等工具中处理关系感到困惑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-02
    相关资源
    最近更新 更多