我有一个小型数据库,并通过Rails页面添加条目.我"摧毁"了其中一个条目,现在我的ID序列正在跳过一个.例如,我现在有42个然后是44个,而不是显而易见的:42,43,44.
我想知道是否有办法通过控制台编辑新对象的ID号.我试过了:
record.id = 43 record.save
和
record = record.new record.attributes = { :id => 43 }
但两者都不起作用.我相当肯定必须有一个控制台方法,但我似乎无法在Google上找到更具体的内容,我可能错误地阅读了Rails API ...我是否可能必须通过sqlite中的直接SQL来做到这一点?
谢谢
最好的方法是直接执行SQL,并在序列中解决这个时间故障.
尝试访问控制台(ruby脚本/控制台)并键入:
>> sql = "update records set id=43 where id=44" >> ActiveRecord::Base.connection.execute(sql)
其中44是新创建的对象的id,而43是您在表中丢失的那个
祝好运!
实际上,您可以手动为新对象设置id:
record = Record.new record.id = 1234 record.save
但是,您要做的是更新现有对象的ID.当你设置record.id = 43
然后调用save
会发生什么是ActiveRecord将尝试生成这样的SQL:
update records set id = 43 where id = 43
请注意,它要更新的ID 与您尝试更改的ID 相同.这就是为什么它不起作用.
所以是的,你必须使用SQL来改变它.这是一个好主意是否是另一个问题,但有时需要完成.