【发布时间】:2016-08-14 00:04:25
【问题描述】:
我的代码可以让我自动创建记录或更新记录的属性(如果它已经存在)。
代码如下所示:
class User < ApplicationRecord
def self.update_or_create(attributes)
user = first || new
user.assign_attributes(attributes)
user.save
user
end
end
当我调用它时,我可以这样做:
User.where(provider: auth.provider, uid: auth.uid).update_or_create(display_name: hash.display_name)
执行该代码将找到具有匹配 provider 和 uid 的记录并将其更新为 display_name 或创建一个包含所有前面提到的所有 4 个属性集的全新记录。
这是如何工作的?
具体来说,我似乎无法理解对 user.save 的调用如何能够“获取”provider 和 uid 的属性,因为它们仅在搜索上下文中提供,而不是作为属性传递到update_or_create。
【问题讨论】:
标签: ruby-on-rails ruby activerecord rails-activerecord