You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails如何基于非ID的唯一列创建外键约束?

解决方案

要实现apps表的tenant_code列关联tenants表的code列,不能用t.references(它默认关联目标表的id列并自动追加_id后缀),需要手动创建列并显式指定外键约束:

class CreateApps < ActiveRecord::Migration[7.1]
  def change
    create_table :apps, id: :uuid do |t|
      # 定义其他业务列
      t.string :tenant_code, index: true
      # 定义其他业务列
    end

    # 显式添加外键约束,指定关联tenants表的code列
    add_foreign_key :apps, :tenants, column: :tenant_code, primary_key: :code
  end
end

关键说明

  • 手动创建tenant_code列,类型与tenants表的code列保持一致(这里是string),同时添加索引提升查询性能。
  • 使用add_foreign_key单独配置外键:
    • column: :tenant_code指定当前表的外键列
    • primary_key: :code指定关联目标表(tenants)的对应列,因为code已经是唯一索引,符合外键约束的唯一性要求。

内容的提问来源于stack exchange,提问作者Ryan Pierce Williams

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 05:53:20