has_many :through 并连接 Rails 中的表



我想为我的应用程序正确实现数据库和相关模型。

我有两种型号:userlocation。我希望它们由一个表连接,因为我需要保留有关这两个实体之间关联的历史数据。

因此,除了location_id的外键之外,我还创建了一个名为user_locations的连接表,user_id我还需要两个额外的字段。

目前为止,一切都好。

出现了一个新的要求,我需要我的location是多态的。 我不知道如何正确设置我的模型进行存储,以便能够拥有该连接表和多态关联。

这是我到目前为止想出的:

user.rb

class User < ApplicationRecord
has_many :locations, through: :user_locations, as: :locationable, source_type: 'User'
has_many :user_locations
end

location.rb

class Location < ApplicationRecord
belongs_to :locationable, polymorphic: true
has_many :users
end

user_location.rb

class UserLocation < ApplicationRecord
belongs_to :user
belongs_to :location
validates_presence_of :user
validates_presence_of :location
end

我找到了一个非常好的教程/文章,我认为可以在这里帮助你。

这将需要你做一些事情,比如:

class User < ApplicationRecord
has_many :locations
has_many :model_ones, through: :locations, source: :locationable, source_type: 'ModelOne'
has_many :model_twos, through: :locations, source: :locationable, source_type: 'ModelTwo'

和:

class Location < ApplicationRecord
belongs_to :locationable, polymorphic: true
belongs_to :user
end

显然,ModelOneModelTwo都填充了您需要的模型。

最新更新