gpt4 book ai didi

ruby-on-rails - 如何在 Ruby on Rails/ActiveRecord 中克隆模型?

转载 作者:太空宇宙 更新时间:2023-11-03 17:52:40 25 4
gpt4 key购买 nike

我正在尝试为用户创建消息的多个副本:

users.each do |user|
new_message = message.clone
new_message.to = user
new_message.save!
end

但是,这在第一个用户之后不起作用。这是错误消息的一部分:

  SQL (0.7ms)  INSERT INTO "messages" ("content", "to_id") VALUES (?, ?)  [["content", "abc"], ["to_id", 1]]
(2.5ms) commit transaction
User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = 2 LIMIT 1
(0.0ms) begin transaction
SQL (0.5ms) INSERT INTO "messages" ("content", "id", "to_id") VALUES (?, ?, ?) [["content", "abc"], ["id", 6], ["to_id", 2]]
SQLite3::ConstraintException: PRIMARY KEY must be unique: INSERT INTO "messages" ("content", "id", "to_id") VALUES (?, ?, ?)
(0.0ms) rollback transaction
Completed 500 Internal Server Error in 130.1ms

ActiveRecord::StatementInvalid (SQLite3::ConstraintException: PRIMARY KEY must be unique: INSERT INTO "messages" ("content", "id", "to_id") VALUES (?, ?, ?)):

如您所见,问题是第 2 次循环运行时,message.clone 必须包含前一个 new_messageid >.

为许多用户克隆消息记录的正确方法是什么?当然,我可以手动复制每个属性(我有一个 lot 而不仅仅是 contentto_id)进入一个全新的 Message 对象。但我想知道是否有更好的方法。

最佳答案

您可以使用 dup ,其中 idcreated_atupdated_at 设置为 nil。这将确保不会抛出主键异常,但是如果有其他唯一验证,它们将失败。你必须单独处理它们。

users.each do |user|
new_message = message.dup
new_message.to = user
new_message.save!
end

关于ruby-on-rails - 如何在 Ruby on Rails/ActiveRecord 中克隆模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21342761/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com