我在Ruby中有一个db文件,它在美国创建城市,即:
City.create(:name => "Sausalito,CA", :state => "CA")
但是,在测试自动填充功能时,如果格式正确,数据库只会识别每个预加载的位置。
所以它会看到'Sausolito,CA'作为输入而不是'sausolito,ca'作为一个。
这是对数据库的简单修复还是搜索框问题?
谢谢!
编辑:这是电话:
class CitiesController < ApplicationController
def autocomplete
render :json => City.autocomplete_name(params[:term]).collect{ |city| {:value => city.id, :label => "#{city.name}"} }
end
end
AC:
class City < ActiveRecord::Base
attr_accessible :name, :state
has_many :searches
scope :autocomplete_name, lambda {|name|
where("cities.name LIKE ?", "#{name}%")
}
end
答案 0 :(得分:1)
您要搜索的数据库是什么?对于MySQL,您可以使用Order By子句来实现不区分大小写 - 请参阅下文....
另外我发现STRCMP()区分大小写很奇怪,但ORDER BY不区分大小写。
您可以在此处找到更多信息。即使我想知道在某些情况下,MySQL选择不区分大小写但我没有花时间弄清楚为什么它不一致,今天我学到了它!
http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html
最好的方法是将所有这些记录加载到内存中,并存储这些字符串的小写版本。您的性能会比使用自动完成功能的数据库好得多。
答案 1 :(得分:1)
如果您的数据库使用SELECT * FROM xyz WHERE name LIKE '$typed%'
类型查询加载查询,则可以使用SELECT * FROM xyz WHERE LOWER(name) LIKE LOWER("$typed%")