Rails 3 update_all在控制台中有条件

时间:2014-08-28 13:01:00

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

我有一个带有Facility模型的Rails 3.2.14应用程序,我需要根据名为facility_name的字段更新Facility模型中的region_id。

所以我试图更新所有设施名称以DFW开头的设施。

在控制台中我尝试了这个:

Facility.where("facility_name: ilike 'DFW'")

这给了我nil或0记录的回报。

我希望能够做这样的事情来更新Facility模型中的region_id:

Facility.where("facility_name: ilike 'DFW'").update_all(region_id: '1')

但这不起作用,因为即使有很多记录,其中的设施名称以DFW开头,我的where方法也会报告0计数。

我的语法错了还是在Rails 3中无法做到?如果没有,我将如何使用此区域ID更新超过100条记录而不使用crud / rails_admin进行更新?

我问了一个关于如何使用update_all的类似问题,但它没有涵盖条件部分。希望这不算重复。

1 个答案:

答案 0 :(得分:1)

看起来你有点混淆语法。

将where条件放在字符串中时,需要符合数据库适配器的语法。所以对于有ilike的postgres,你需要这样做:

Facility.where("facility_name ilike 'DFW'")

当您传递哈希时使用冒号,但是人们不能做类似的语句:

Facility.where(facility_name: 'DFW')

请注意,如果您希望ilike检查列中包含该值的任何行,则需要尾随&领先的百分号。

Facility.where("facility_name ilike '%DFW%'")

从那里你可以执行update_all