我想为我的应用程序正确实现数据库和相关模型。
我有两种型号:user
和location
。我希望它们由一个表连接,因为我需要保留有关这两个实体之间关联的历史数据。
因此,除了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
显然,ModelOne
和ModelTwo
都填充了您需要的模型。