在我的应用程序中,我使用CSV导入来添加内容,但是,在CSV导入后,当我尝试创建新对象时,我收到一条错误消息,指出ID存在冲突。我已经想出如何在每次导入后手动解决此问题:
SELECT setval('products_id_seq', max(id))
FROM products;
虽然这有效,但我想知道在我提交CSV表之后是否有办法自动化它,但我不确定如何在ruby函数中使用SQL,任何帮助都将不胜感激!!
注意:对于我的CSV输入,我使用了this railscasts
中描述的方法答案 0 :(得分:1)
根据您在评论中对我的问题的回答(是否可以将查询添加到 Ruby 函数以及您使用 ActiveRecord 与<进行交互) em> Postgres ),我的回答如下:
我认为最好的办法是在导入 CSV 后,将上面的查询添加到 Ruby 代码中。
关于您的评论问题,是的,可以将查询添加到 Ruby 函数。
使用 ActiveRecord ,虽然他们一般不鼓励原始 SQL ,但您应该可以使用模型上的connection
用于运行查询的对象。
所以,这样的事情应该有用(没有经过测试,因为我没有方便的 Rails 设置):
query = "SELECT setval('products_id_seq', max(id))
FROM products"
TheModel.connection.execute(query)
其中TheModel
是您要使用其连接的模型对象的名称(连接到您正在进行 CSV 导入的数据库的那个)。