我有一个包含以下列的表
id store_id store_name
id
和store_id
总是一样的。因为我是铁杆新手......我错误地创造了它。但由于我在很多地方使用store_id
,我现在不能回去改变一些东西。
问题1:我正在为此表制作管理员屏幕。当我尝试插入记录时,尽管id
已插入(导轨自动获取下一个),NULL
正插入store_id
。
使用create方法插入记录时,有store_id
中的id
与Id
相同的编号。是否可以将某些内容放入模型中,以便在创建记录之前始终执行该操作。在那里我可以访问应该插入的下一个id
吗?
问题2:由于我现在正在为此表制作管理员屏幕..之前我只是手动将数据插入此表。我手动插入了5条记录,因此store_id
和{{1}} 1..5已经存在。现在,当我尝试从管理屏幕插入记录时,它表示重复键违反了约束。它是否可能尝试插入id为1,因为这是我第一次使用rails将记录插入此表?
答案 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”列更新为主键。