Heroku大小写敏感
问题描述:
我最近上传了我的应用程序到heroku,由于postgresql,区分大小写不起作用,我想知道如何解决这个问题?我的代码如下:Heroku大小写敏感
relation = Game.gamsearch(params[:gamsearch])
relation = Game.consearch(params[:consearch]) if params[:consearch].present?
relation = Game.gensearch(params[:gensearch]) if params[:gensearch].present?
relation = Game.where("game_name LIKE ?", "#{params[:game_name]}%") if params[:game_name].present?
relation = Game.where("console = ?", params[:console]) if params[:console].present?
视图代码:
<%= form_tag games_path, :controller => 'games', :action => 'gamsearch', :method => 'get' do %>
<%= text_field_tag :gamsearch, params[:gamsearch] %>
<%= submit_tag t('.searchb'), :game_name => nil %>
<% end %>
这是型号代码:
def self.gensearch(*args)
#search for games by their genre
return [] if args.blank?
cond_text, cond_values = [], []
args.each do |str|
next if str.blank?
cond_text << "(%s)" % str.split.map{|w| "genre LIKE ? "}.join(" OR ")
cond_values.concat(str.split.map{|w| "%#{w}%"})
end
all :conditions => [cond_text.join(" AND "), *cond_values]
末
答
relation = Game.where("game_name ILIKE ?", "#{params[:game_name]}%") if params[:game_name].present?
通知ILIKE,而不是像
答
ILIKE是去PG的路,但如果你有另一个数据库(sqlite)在开发中,那可能无法工作。解决此问题的一种方法是将两个值都大写,然后比较两者的大写版本。
+0
是的,有效的点。不过,我会一直认为,您应该针对您打算部署到的数据库进行构建。 – 2012-04-24 14:22:34
+0
当然!但是对于一些人来说,开发中的PG有点矫枉过正!他们可能应该切换到mongo,但这是另一个话题;-) – 2012-04-24 14:40:10
太好了。我该如何处理其他搜索,特别是列表中的第一个,或者这是你的知识之外 – user1222136 2012-04-24 14:02:30
你需要在gamsearch方法中使用ILIKE,对于搜索和gensearch也是如此。没有看到这些方法,这是超出我的知识:) – 2012-04-24 14:05:12
我已更新我的文章:) – user1222136 2012-04-24 14:10:06