【问题标题】:Rails Console: Create a New Record Using an Existing RecordRails 控制台:使用现有记录创建新记录
【发布时间】:2020-10-20 22:09:07
【问题描述】:

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

我想做这样的事情:

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

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

感谢您的帮助。

【问题讨论】:

标签: ruby-on-rails rails-console


【解决方案1】:

我想你想要的是:

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.

第三行最后将新对象保存到数据库中。最后只需执行一次即可节省时间。

【讨论】:

  • 很好的答案,虽然我认为你的第一行应该是user = User.first.dup
  • 谢谢两位的回复。我从没想过要搜索dupduplicating 这两个词。效果很好。非常感谢。
  • 是的,我的意思是 User.first。谢谢亚当21e。已编辑
猜你喜欢
  • 2012-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-25
  • 1970-01-01
  • 1970-01-01
  • 2023-01-12
相关资源
最近更新 更多