ActiveRecord 直接从哈希更新而不获取每个属性

ActiveRecord update from hash directly without getting each attribute

这是一条用户记录。

{"id"=>1, "name"=>"jack", "age"=>43, "job"=>"driver"}

我想使用以下数据更新此用户。

@user = {"id"=>1, "name"=>"tomas", "age"=>35, "job"=>"developer"}

我可以用这种方式更新这个用户。

name, age, job = @user.values_at(:name, :age, :job)
User.update(1, :name => name, :age => age, :job => job) 

但我想知道是否可以直接使用 @user 进行更新,而无需像创建记录时那样获取每个属性。

你更喜欢这个吗?

User.update(@user[:id], @user.slice(:name, :age, :job)) 

并且当您在 Rails 6.0 上使用 Ruby 时,您使用的是 PostgreSQL 数据库,您可以像这样使用 upsert :

User.upsert(@user, unique_by: :id)