自动完成以及如何让它理解小写和大写

时间:2012-01-26 04:07:43

标签: html ruby-on-rails ruby database sqlite

我在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

2 个答案:

答案 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%")