【发布时间】:2015-05-28 19:23:35
【问题描述】:
我的数据模型通常要求它们的主键是另一种类型,而不仅仅是普通的自动递增整数。但是,Rails/AR 并未完全清楚如何将其更改为默认设置。
如何在 Activerecord 中使用整数以外的其他类型作为主键?
【问题讨论】:
标签: ruby-on-rails primary-key rails-activerecord rails-migrations
我的数据模型通常要求它们的主键是另一种类型,而不仅仅是普通的自动递增整数。但是,Rails/AR 并未完全清楚如何将其更改为默认设置。
如何在 Activerecord 中使用整数以外的其他类型作为主键?
【问题讨论】:
标签: ruby-on-rails primary-key rails-activerecord rails-migrations
警告:除了 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
您的模型甚至会自动从架构中推断出主键列名。耶!
【讨论】: