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.
第三行最后将新对象保存到数据库中。最后只做一次这样可以节省时间。
最近我不得不根据以前的记录在非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.
第三行最后将新对象保存到数据库中。最后只做一次这样可以节省时间。