gpt4 book ai didi

mysql - 在 RoR 模式中添加主键约束

转载 作者:行者123 更新时间:2023-11-30 23:28:52 26 4
gpt4 key购买 nike

在我们的网络应用程序中,我们的表格在 id 字段中有一个“GUID”ID。通过调查用于创建数据库的实际 SQL 代码,我们发现我们的 ID 实际上没有作为主键延迟。似乎没有强制执行唯一性,也没有创建索引。

这感觉很糟糕,所以我们想解决这个问题。我们的目标只是将我们的 ID 字段设置为“主键”

这是我们的 schema.rb 的示例

 create_table "projects", :id => false, :force => true do |t|
t.string "id"
t.string "name"
t.string "objective"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.string "client_account_id"
t.string "default_project_name"
t.boolean "quota_exceeded", :default => false, :null => false
end

在开发中,我们使用 SQLite3 数据库,而在生产中,我们依赖 MySQL。

我知道不可能在现有的 SQLite3 数据库上添加这样的约束,但我准备删除它并在需要时重新创建它。如果可能的话,我想避免删除 MySQL 数据库,但如果真的有必要,我可以备份它并将数据插入新模式。

最好的方法是什么? (Rails V3.2.6)

最佳答案

如果你想在 Rails 中设置一个非标准的主键,你应该看看 composite_primary_keys gem

在您的迁移使用中,就像您已经做过的那样,

:id => false 

然后在你的模型中尝试以下操作

require 'composite_primary_keys'
class User < ActiveRecord::Base
self.primary_keys = :your_custom_id
end

gem 正在覆盖默认的 Rails 行为,以便您要使用的键由 create 语句设置。这样,您也可以根据需要使用复合主键。

另一种方法是在迁移中使用:primary_key选项

create_table "projects", :primary_key => 'your_id' do 
...
end

或者,

如果你只是想确保唯一性,你可以像这样使用 ActiveRecord 验证:

validates_uniqueness_of :your_id, :message => "ID needs to be unique"

希望这对您有所帮助。

关于mysql - 在 RoR 模式中添加主键约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11719228/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com