Ruby on Rails (RoR) 喜欢强调约定优于配置的概念。因此,它寻求最小化配置量。
因此,如果您希望 contractId 是一个字符串类型,那么您可以在表中添加一个额外的字段并在任何您想要的地方使用它,并让 Rails 使用 id 作为主键。
更改主键
生成一个新的迁移文件,命名为“ChangePrimaryKey”(你可以给任何名字)。
class ChangePrimaryKey < ActiveRecord::Migration
def up
remove_column :table, :id # remove existing primary key
rename_column :table, :udid, :id # rename existing UDID column
execute "ALTER TABLE table ADD PRIMARY KEY (id);"
end
def down
# Remove the UDID primary key. Note this would differ based on your database
execute "ALTER TABLE table DROP CONSTRAINT table_pkey;"
rename_column :table, :id, :udid
add_column :table, :id, :primary_key
end
end
如果您正在创建一个新表,您的迁移可能如下所示:
class AddTableWithDifferentPrimaryKey < ActiveRecord:Migration
def change
create_table :table, id: false do |t|
t.string :id, null: false
# other columns
t.timestamps
execute "ALTER TABLE table ADD PRIMARY KEY (id);"
end
end
end
注意您传递到表中的 id: false 选项 - 这要求 Rails 不要代表您创建主键列。
模型变化
在模型中,您必须添加以下行,以便
Rails 以编程方式查找您打算用作主键的列。
class Table < ActiveRecord::Base
self.primary_key = :id
# rest of span
end
我希望你能完成剩下的事情。
如果您想查看 Rails 真正的魔法,请不要更改默认 id :)