多态关联 Rails:不同的 Primary_keys 类型(id 和 uuid)

hat*_*ine 5 ruby polymorphism uuid ruby-on-rails

我想定义一个多态表。我的问题是一个表的 Primary_key 是 type uuid(string),另一个表是id(integer). 我想也许有一个model_able_id和一个model_able_uuid变化取决于model_type但我无法弄清楚,它可能会破坏大量的多态的活动记录功能。

我想到的其他一些事情是使用 STI,但我仍然很困惑,当然,我可以将 ids 迁移到 uuid,这会解决我的问题(但我宁愿不这样做)。

小智 5

在选项中指定(多态)外键的类型。如果需要,请更改:string:uuid

create_table :table_name do |t|
  t.references :target, type: :string, polymorphic: true, null: false
end
Run Code Online (Sandbox Code Playgroud)

那么字符串和整数target_id都是可以接受的。

检查API 文档


小智 0

我有完全相同的问题。我的解决方案将字段的类型修改_id为字符串。

def change
  add_reference :ratings, :rater, polymorphic: true, index: true
  change_column :ratings, :rater_id, :string
end
Run Code Online (Sandbox Code Playgroud)

我希望它有帮助。