Rails 控制台:使用现有记录创建新记录

Rails Console: Create a New Record Using an Existing Record

最近我不得不根据以前的记录在非rails 应用程序数据库table 中创建几条记录。这让我想到了如何在 rails 应用程序中执行此操作。我在控制台中尝试了一些操作,但没有任何效果。

我想做这样的事情:

001> user = User.new(User.first)

我知道这行不通,但希望它能告诉您我的想法。 User 是一个很大的 table/model,我只需要更改几个字段。因此,如果我可以在 User.first 中设置具有相同值的 new 记录,那么我就可以在 .save-ing 记录之前编辑我需要的字段。

感谢您的帮助。

我想你想要的是:

user = User.first.dup
user.assign_attributes(email: "myemail@test.test")
user.save

第一行使用dup创建对象的副本。该副本尚未保存到数据库中。 Replace dup with clone if you're using an old version of Rails (<3.1).

在第二行中,assign_attributes 更改了对象的属性,但仍未将其保存到数据库中。如果您正在使用已保存在数据库中的对象,则可以使用 update 而不是 assign_attributes 来更改对象的属性并一次性保存更改。这在这里行不通,因为我们还没有保存重复的用户。 More details on that here.

第三行最后将新对象保存到数据库中。最后只做一次这样可以节省时间。