我正在尝试弄清楚如何使用 ActiveRecord 来执行以下伪代码:
rows_updated = UPDATE my_table SET my_column="abc" WHERE id=123
if rows_updated == 0 then INSERT INTO my_table (id, my_column) VALUES (123, "abc")
这是因为大部分时间记录已经存在。我想为自己节省 first_or_create!
似乎生成的额外 SELECT
查询。
有什么想法吗?
最佳答案
对于这种情况,还有不同且更优雅的解决方案(从我的角度来看) 其中一个选项是使用替换命令而不是所有这些代码。
只需运行:
REPLACE INTO my_table (id, my_column) VALUES (123, "abc")
这个解决方案在大多数情况下工作得很好,但是如果你对这段代码有很高的负载,你应该考虑使用 INSERT .... ON DUPLICATE KEY UPDATE
关于mysql - 当记录通常已经存在时如何有效地使用 first_or_initialize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19341867/