我有一个带有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的类似问题,但它没有涵盖条件部分。希望这不算重复。
答案 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