相关疑难解决方法(0)

Rails自动分配已存在的id

我创建了一个像这样的新记录:

truck = Truck.create(:name=>name, :user_id=>2)

我的数据库目前有几千个实体用于卡车,但我分配了其中几个的id,以某种方式留下了一些id.所以正在发生的是rails创建id为150的项目并且它工作正常.但后来它尝试创建一个项目并为其指定id = 151,但该ID可能已经存在,所以我看到了这个错误:

ActiveRecord::RecordNotUnique (PG::Error: ERROR: duplicate key value violates unique constraint "companies_pkey" DETAIL: Key (id)=(151) already exists.

下次我运行动作时,它只会分配id 152,如果尚未获取该值,则可以正常工作.如何在分配ID之前检查ID是否已存在?

谢谢!

编辑

卡车ID是重复的东西.用户已经存在,在这种情况下是常量.它实际上是我必须处理的遗留问题.一种选择是在let rails重新创建表,这次自动分配每个id.我开始认为这可能是最好的选择,因为我还有其他一些问题,但是这样做的迁移会非常复杂,因为Truck是很多其他表中的外键.是否有一种简单的方法可以让rails创建一个新表,其中包含已存储在Truck下的相同数据,具有自动分配的ID并维护所有现有关系?

postgresql ruby-on-rails ruby-on-rails-3

89
推荐指数
4
解决办法
2万
查看次数

Rails重置所有Postgres序列?

以下在Rails 3控制台中可以重置Postgres序列:

ActiveRecord::Base.connection.reset_pk_sequence!('menucontrols')
ActiveRecord::Base.connection.reset_pk_sequence!('statuscodes')
ActiveRecord::Base.connection.reset_pk_sequence!('wostatuses')
ActiveRecord::Base.connection.reset_pk_sequence!('taskstatuses')
ActiveRecord::Base.connection.reset_pk_sequence!('priorities')
ActiveRecord::Base.connection.reset_pk_sequence!('actcodes')
Run Code Online (Sandbox Code Playgroud)

是否有一个命令可以重置所有这些命令而不必单独执行每个命令?

谢谢您的帮助!

postgresql ruby-on-rails

20
推荐指数
2
解决办法
7389
查看次数

在postgresql,heroku,Rails 4上设计主键错误

这真的很奇怪,我正在尝试通过命令行创建一个新用户,我收到此错误:

User.create :email => "pheewq+1@gmail.com", :password => '123456789', :password_confirmation => '123456789'

PG::UniqueViolation: ERROR:  duplicate key value violates unique constraint "users_pkey"
DETAIL:  Key (id)=(37) already exists.
Run Code Online (Sandbox Code Playgroud)

postgresql ruby-on-rails heroku devise

5
推荐指数
1
解决办法
2865
查看次数