【问题标题】:rails multiple has_many relationships between the same modelsrails 相同模型之间的多个 has_many 关系
【发布时间】:2019-09-26 20:54:10
【问题描述】:

我正在尝试找出在 Rails 中建模多对一关系的最佳方法,其中关系有多个范围。

一个例子是一家餐厅有很多照片。我希望能够打电话

restaurant.lounge_photos

只接收休息室照片, 而且还能打电话

restaurant.food_photos

只接收食物照片。

我能想到的两种方法是:

  1. 使用多个连接表,并为每种类型的照片使用 has_many 到 has_one 关系。

  2. 为照片模型添加“类型”属性并编写范围方法。

这两个对我来说似乎有点笨拙。 这里有更好的解决方案吗?

【问题讨论】:

标签: sql ruby-on-rails relational-database


【解决方案1】:

我认为你必须去has_many单表继承(STI),如下。

  1. restaurantphoto 建立关联
class Restaurant < ActiveRecord::Base
 has_many :photos
end

class Photo < ActiveRecord::Base
 belongs_to :restaurant
end
  1. 那么您必须在Photo 模型中使用STI。原因是lounge_photosfood_photos 的几乎所有字段都是通用的。

直接使用范围,您可以区分它并实现您的目标。

更多STI使用详情可以参考this link

【讨论】:

    【解决方案2】:

    这是一种方法,使用 type

    has_many :food_photos, 
             class_name: 'Photo', 
             foreign_key: :restaurant_id, 
             -> { where(type: 'food') }
    
    has_many :lounge_photos, 
             class_name: 'Photo', 
             foreign_key: :restaurant_id, 
             -> { where(type: 'lounge') }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-05
      • 1970-01-01
      • 2017-01-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多