我有代码可以让我自动创建记录或更新记录的属性(如果已存在)。
代码如下所示:
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
的调用如何能够获得&#34; provider
和uid
的属性,因为它们仅在搜索上下文中提供,而不是作为属性传递给update_or_create
。