我正在尝试以一种有点奇怪的方式使用 Rails 的多态关联,但遇到了问题。
多态表是Address
class Address < ActiveRecord::Base
belongs_to :addressable, polymorphic: true
end
我的数据库有唯一性约束,因此不能将相同的地址地址关联添加两次。
我还有一个Trip
需要两个地址的模型。一个是旅行的起点,另一个是目的地。
class Trip < ActiveRecord::Base
has_one :origin, as: :addressable, class_name: 'Address'
has_one :destination, as: :addressable, class_name: 'Address'
end
问题在于,当 Rails 创建与行程相关联的地址时,它使用类名(即“Trip”)来填充该addressable_type
列。这意味着,如果我尝试使用起点和终点进行旅行,rails 会尝试添加两行具有相同的addressable_type
和addressable_id
。这显然在唯一性约束上失败了。
我可以删除唯一性约束,但最终会得到重复的记录,这会使 Rails 感到困惑,因为它不知道哪条记录是起点,哪条记录是终点。
我真正想做的是指定要用于的字符串addressable_type
:
class Trip < ActiveRecord::Base
has_one :origin, as: :addressable, class_name: 'Address', type: 'Trip Origin'
has_one :destination, as: :addressable, class_name: 'Address', type: 'Trip Destination'
end
那可能吗?是否有其他解决方案或者我需要重新考虑我的数据库架构?