如何在Rails中的表中获取下一个ID

时间:2010-02-09 23:53:34

标签: ruby-on-rails activerecord

我有一个包含以下列的表

id   store_id   store_name  

idstore_id总是一样的。因为我是铁杆新手......我错误地创造了它。但由于我在很多地方使用store_id,我现在不能回去改变一些东西。

问题1:我正在为此表制作管理员屏幕。当我尝试插入记录时,尽管id已插入(导轨自动获取下一个),NULL正插入store_id

使用create方法插入记录时,有store_id中的idId相同的编号。是否可以将某些内容放入模型中,以便在创建记录之前始终执行该操作。在那里我可以访问应该插入的下一个id吗?

问题2:由于我现在正在为此表制作管理员屏幕..之前我只是手动将数据插入此表。我手动插入了5条记录,因此store_id和{{1}} 1..5已经存在。现在,当我尝试从管理屏幕插入记录时,它表示重复键违反了约束。它是否可能尝试插入id为1,因为这是我第一次使用rails将记录插入此表?

3 个答案:

答案 0 :(得分:2)

问题1 :在您删除store_id列之前,请覆盖模型中的getter以获得兼容性。

def store_id
  id
end

至于问题2 :请确保您的创建代码未手动设置id。只要您的对象没有定义id,下一条记录就应该插入id为6。从script/console尝试。

答案 1 :(得分:1)

我认为您应该只将代码更改为仅使用ID。 一个称职的编辑器将能够告诉您在项目中使用商店ID的位置,如果引入回归错误,测试将有所帮助。

否则,您可以使用数据库触发器。或者在模型上设置回调以从新创建的id值设置store_id(查看 after_create 回调)。同样,这两种方法都是通过简单的修复方法来掩盖系统中的错误。

答案 2 :(得分:1)

您可以为ActiveRecord模型设置自定义主键:

class Store < ActiveRecord::Base
  set_primary_key :store_id
end

然后,您可以创建一个新的迁移,删除“id”列并将“store_id”列更新为主键。