Ruby on rails rails非整数主键
我有一张叫做合同的桌子。它当前的默认主键是Rails自动生成的:id字段,它是一个整数。我希望有一个名为construcd的字段,它是字符串类型,并将其用作主键。我想知道的是:Ruby on rails rails非整数主键,ruby-on-rails,primary-key,Ruby On Rails,Primary Key,我有一张叫做合同的桌子。它当前的默认主键是Rails自动生成的:id字段,它是一个整数。我希望有一个名为construcd的字段,它是字符串类型,并将其用作主键。我想知道的是: 这是最佳实践吗?这样做有没有潜在的问题 我会怎么做 您可能知道,Rails支持即时更改主id列: class Contract < ActiveRecord::Base self.primary_key = "contractId" end classcontract
您可能知道,Rails支持即时更改主id列:
class Contract < ActiveRecord::Base
self.primary_key = "contractId"
end
classcontract
请注意,即使construcd
列具有唯一索引,字符串列上的索引也总是比整数列中的索引慢一点
此外,这不是Rails的方式,可能会混淆使用此应用程序的其他开发人员。尤其是当表具有非标准主键时,构建关联或路由更容易出错。这是尽可能长时间避免使用此技术的一个很好的理由。您可能知道,Rails支持即时更改主id列:
class Contract < ActiveRecord::Base
self.primary_key = "contractId"
end
classcontract
请注意,即使construcd
列具有唯一索引,字符串列上的索引也总是比整数列中的索引慢一点
此外,这不是Rails的方式,可能会混淆使用此应用程序的其他开发人员。尤其是当表具有非标准主键时,构建关联或路由更容易出错。我认为这是尽可能长时间避免使用这种技术的一个很好的理由。RubyonRails(RoR)喜欢强调约定优于配置的概念。因此,它寻求最小化配置量。
因此,如果您希望使用字符串类型的construct,那么您可以在表中添加一个额外字段,并在任何地方使用它,并让Rails使用id作为primarykey
更改主密钥
生成一个新的迁移文件名为“ChangePrimaryKey”(您可以给出任何名称)
class ChangePrimaryKey
如果要创建新表,则迁移可能如下所示:
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
class AddTableWithDifferentPrimaryKey
注意传递到表中的id:false选项-这要求Rails不要代表您创建主键列
对模型的更改
在模型中,必须添加以下行,以便
Rails以编程方式查找要用作主键的列
class Table < ActiveRecord::Base
self.primary_key = :id
# rest of span
end
类表
我希望你能做剩下的事情
如果您想看到Rails真正的魔力,请不要更改默认id:)RubyonRails(RoR)喜欢强调约定优于配置的概念。因此,它寻求最小化配置量。
因此,如果您希望使用字符串类型的construct,那么您可以在表中添加一个额外字段,并在任何地方使用它,并让Rails使用id作为primarykey
更改主密钥
生成一个新的迁移文件名为“ChangePrimaryKey”(您可以给出任何名称)
class ChangePrimaryKey
如果要创建新表,则迁移可能如下所示:
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
class AddTableWithDifferentPrimaryKey
注意传递到表中的id:false选项-这要求Rails不要代表您创建主键列
对模型的更改
在模型中,必须添加以下行,以便
Rails以编程方式查找要用作主键的列
class Table < ActiveRecord::Base
self.primary_key = :id
# rest of span
end
类表
我希望你能做剩下的事情
如果您想看到Rails real Magics:),请不要更改默认id。Hi-谢谢您的帮助。我尝试了以下代码:class ChangePk
:id
第2列。重命名:收缩