Rails - 更新包含此属性的所有记录

时间:2017-03-14 18:03:33

标签: ruby-on-rails

在我的rails应用程序中,我有一个看起来像这样的哈希

{"10.70.1.140"=>"e316eba4-5d90-4cd2-a82f-76ca1249153f",
 "10.70.1.2"=>"144efa29-4c59-4cc3-bf12-22715b96dbdf",
 "10.70.0.127"=>"dddec996-c450-4a71-b164-866ae7e7752a",
 "10.70.0.124"=>"5ad9e8f1-6fc7-4f26-83ef-1f0cfec0b568",
 "10.70.0.115"=>"dc3191c1-6235-47ef-a9ab-b1ff735dee6c",
 "10.70.0.161"=>"aa7a96b9-6414-4d0f-90a9-bcc785826c69",
 "10.70.0.2"=>"45d3c462-8300-4111-97bd-1fa4253b3c62",
 "10.70.0.211"=>"5558db58-b373-4007-a855-d568b0bcb106",
 "10.70.0.212"=>"76daaa1f-ee9b-4346-b052-c7ffdaa18838"}

此处的值是唯一标识符,用于将另一个表中的记录与相应的IP地址进行匹配。所以我想做的就是这样:

Sites.where(node_identifier: hash.values).update_attributes(ip: hash.keys)

例如,根据我的示例,所有节点标识符为e316eba4-5d90-4cd2-a82f-76ca1249153f的问题都将其IP地址列更新为10.70.1.140

但是,使用ActiveRecord更新命令(例如我刚才演示的内容)不起作用。我没有得到错误或任何东西,只是一个巨大的“更新”声明,不会改变任何东西。有人可以帮我弄清楚如何正确地做到这一点,以避免大量的查询,如下面的例子:

hash.each do |key, value|
   Sites.where(node_identifier: value).update_all(ip: key)
end

我想另一个问题源于:我可以在一个查询中使用多个密钥更新多个记录吗?

0 个答案:

没有答案
相关问题