模型属性被神奇地设置

时间:2016-08-14 00:04:25

标签: ruby-on-rails ruby activerecord rails-activerecord

我有代码可以让我自动创建记录或更新记录的属性(如果已存在)。

代码如下所示:

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)

执行该代码会找到匹配provideruid的记录并更新它display_name或创建一个全新的记录,其中包含前面提到的所有4个属性集

这是如何运作的?

具体来说,我似乎无法理解对user.save的调用如何能够获得&#34; provideruid的属性,因为它们仅在搜索上下文中提供,而不是作为属性传递给update_or_create

0 个答案:

没有答案