2010-02-09 56 views
1

有一个表,有以下栏目我如何获得下一个ID在一个表中的Rails

id store_id store_name 

idstore_id总是将是相同的。由于我刚接触Rails ......我错误地创建了它。但我现在不能回去换东西,因为我在很多地方使用store_id

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

在使用create方法插入记录时,有没有什么办法可以在store_id中得到与id相同的编号。有什么可以放在模型中,以便在创建记录之前始终执行。在那里我可以访问应插入的下一个Id

问题2:因为我现在正在为此表制作管理员屏幕..在我刚刚手动插入数据到此表中之前。我已经手动插入了5条记录,因此idstore_id 1..5已经存在。现在,当我尝试从管理员屏幕插入记录时,它说重复密钥违反了约束。可以试图插入1的ID,因为这是我第一次插入记录到这个表使用轨道?

回答

2

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

def store_id 
    id 
end 

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

1

我认为你应该改变你的代码只使用ID。 一个能胜任的编辑将能够告诉你你在项目中使用了商店ID的位置,如果你引入了回归错误,你的测试将会有所帮助。

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

+0

如果我使用after_create它将有更新查询来更新创建的记录 – Omnipresent 2010-02-10 00:15:37

+0

直到创建记录之后才知道ID。这只是数据库的工作原理。 – 2010-02-10 02:25:16

1

可以ActiveRecord的模式设置自定义主键:

class Store < ActiveRecord::Base 
    set_primary_key :store_id 
end 

然后你就可以创建一个新的迁移,消除“ID”列和更新“STORE_ID”列是一个主键。

相关问题