此ActiveRecord查询返回意外结果,如何修复它

时间:2012-07-01 21:52:45

标签: sql ruby-on-rails activerecord

我有这个问题:

@listings = Listing.where('city != ?', 'SommerVille')

我想知道是否有人对可能导致此问题的原因有任何建议?

我想只从数据库中获取那些城市!= SommerVille。

由于


EDIT 上述问题是由于城市名称中的前导或尾随空格所致。 所以我想知道什么是查询数据库的最佳方法,它忽略了大小写并忽略了前导/尾随空格。

以下方法有效但有更好的方法吗?

@unwanted_cities = Listing.where(['city != ?', "SommerVille"]).where(['city != ?', " SommerVille"]).where(['city != ?', "SommerVille "])

1 个答案:

答案 0 :(得分:0)

我认为大多数dbs支持修剪

@listings = Listing.where('TRIM(city) != ?', 'SommerVille')

从长远来看,在进入数据库的过程中去除空格会更好

忽略大小写的一种方法,使用upper

@listings = Listing.where('UPPER(TRIM(city)) != UPPER(?)', 'SommerVille')

或者

@listings = Listing.where('UPPER(TRIM(city)) != ?', 'SommerVille'.upcase)