【问题标题】:ActiveRecord update from hash directly without getting each attributeActiveRecord 直接从哈希更新而不获取每个属性
【发布时间】:2019-11-29 19:34:57
【问题描述】:

这是一条用户记录。

{"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 进行更新,而无需像创建记录时那样获取每个属性。

【问题讨论】:

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


    【解决方案1】:

    你更喜欢这个吗?

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

    当您使用 Ruby on Rails 6.0 时,您使用的是 PostgreSQL 数据库,您可以像这样使用upsert

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

    【讨论】:

    • 我在 Rails 5 上,但我遇到了这个问题。 ActiveModel::ForbiddenAttributesError (ActiveModel::ForbiddenAttributesError):
    • 更新到 Rails 6 和 upsert 帮助了我。谢谢!
    猜你喜欢
    • 2021-01-22
    • 2011-12-26
    • 1970-01-01
    • 2020-03-11
    • 2011-03-16
    • 1970-01-01
    • 2014-06-14
    • 2013-12-26
    • 1970-01-01
    相关资源
    最近更新 更多