Rails:如何通过ActiveRecord_Relation更新所有内容

时间:2018-11-08 17:53:03

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

我通过has_one有两个相关的模型,如下所示:

class Asset
  has_one :device

class Device
  belongs_to :asset

我有一个这样的资产ActiveRecord_Relation:

assets = Asset.all

我需要为每个资产更新每个设备中的字段。我不想为每个关联设备创建一个数组,因为它效率很低。我已经尝试过类似的事情:

assets.joins(:device).update_all( {:device=>{:my_field=>6} )

2 个答案:

答案 0 :(得分:1)

您可以使用SQL:

assets.joins(:device).update_all(["devices.my_field=?", 6])

或者该字段是否取决于其他字段:

assets.joins(:device).update_all("devices.my_field=assets.other_field")

答案 1 :(得分:0)

解决方案是这样的:

---
users:

  - username: user1
    comment: "User 1"
    group: admin
    password: "sha password"
    keys:
      active:
        - "ssh-rsa etc"
    admin: yes

  - username: user2
    comment: "User 2"
    group: users
    groups: deployer
    keys:
      active:
        - "ssh-rsa etc"
    hosts:
      user:
        - host1
        - host2
      deployer:
        - host3

这使用单个数据库查询来更新所有关联设备与资产之间的关系。