【问题标题】:Using other type than serial integer for Activerecord primary key对 Activerecord 主键使用序列整数以外的其他类型
【发布时间】:2015-05-28 19:23:35
【问题描述】:

我的数据模型通常要求它们的主键是另一种类型,而不仅仅是普通的自动递增整数。但是,Rails/AR 并未完全清楚如何将其更改为默认设置。

如何在 Activerecord 中使用整数以外的其他类型作为主键?

【问题讨论】:

    标签: ruby-on-rails primary-key rails-activerecord rails-migrations


    【解决方案1】:

    警告:除了 Rails Master(尚未发布——PR #18228)之外,schema.rb 不会记住列类型,因此该功能暂时无法使用。解决方法在here 中进行了描述。

    我今天正在查看文档,因为这是我长期以来一直在努力解决的问题,我遇到了t.primary_key

    primary_key(name, type = :primary_key, options = {})

    将主键定义附加到表定义中。可以多次调用,但这可能不是一个好主意。

    因此,您只需使用 id: false 指定您的迁移,并使用您选择的名称和类型指定主键:

    class CreateTags < ActiveRecord::Migration
      def change
        create_table :tags, id: false do |t|
          t.primary_key :name, :string
    
          t.timestamps null: false
        end
    
        # Alternative awkward-er syntax
        # create_table "tags", primary_key: "name", id: "string" do
      end
    end
    

    您的模型甚至会自动从架构中推断出主键列名。耶!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多