2013-07-01 71 views
1

我正在使用Postgres作爲db在Rails項目中進行搜索功能。PG ::錯誤:錯誤:運算符不存在:整數~~未知

這裏是我的代碼

def self.search(search) 
    if search 
    find(:all, :conditions => ["LOWER(name) LIKE LOWER(?) OR LOWER(city) LIKE LOWER(?) OR LOWER(address) LIKE LOWER(?) OR (venue_type) LIKE (?)", "%#{search}%", "%#{search}%", "%#{search}%", "%#{search}%"]) 
    else 
     find(:all) 
    end 
    end 

但我的問題是, 「venue_type」 是一個整數。我做了venue_type

def venue_type_check 
    case self.venue_type 
     when 1 
     "Pub" 
     when 2 
     "Nattklubb" 
    end 
end 

現在的情況下切換到我的問題:我如何才能找到我的查詢東西的時候venue_type是一個int?

+0

請嘗試:找到(:全部:條件=> [「LOWER(名稱)等低級()或降低(市)等低級()或降低(地址)等低級()??? OR(venue_type =?)「,」%#{search}%「,」%#{search}%「,」%#{search}%「,search.to_i]) –

+0

錯誤'PG :: Error :錯誤:運算符不存在:整數~~未知'被拋出? – zeantsoi

+0

@BachanSmruty我試過你的方式,但是當我搜索「Nattklubb」(venue_type)時,我沒有得到任何結果。 :/ – maverick

回答

0

請嘗試此代碼。在這裏我添加了switch case到where子句。

def self.search(search) 
      if search 
      find(:all, :conditions => ["LOWER(name) LIKE LOWER(?) OR LOWER(city) LIKE LOWER(?) OR LOWER(address) LIKE LOWER(?) OR (venue_type = CASE WHEN 'pub' = ? THEN 1 WHEN 'nattklubb' = ? THEN 2 END)", "%#{search}%", "%#{search}%", "%#{search}%", "#{search.downcase}", "#{search.downcase}"]) 
      else 
       find(:all) 
      end 
end 
+0

是的,我試過你的代碼,但由於某種原因我得到這個錯誤: PG ::錯誤:錯誤:語法錯誤在或接近「)」 線1:... ub'='%白%'THEN 1當'Nattklubb'='%white%'THEN 2)) ^ ^:選擇「場地」。*從「場地」 )如下('%white%')或較低(地址)如下('%white%')或(venue_type = CASE當'Pub'='%white%''那麼1'Nattklubb'='%white% 'THEN 2)) – maverick

+0

@rsvmrk,對不起,我錯過了開關盒的END。我修改了它。請立即檢查 –

+0

我不知道我的評論現在是否有意義,對此抱歉。 – maverick

0

我想你如果使用軌道3.2或更高版本使用if-else condition in your where clause類似以下

find(:all, :conditions => ["LOWER(name) LIKE LOWER(?) OR LOWER(city) LIKE LOWER(?) 
      OR LOWER(address) LIKE LOWER(?) OR  
    IF(venue_type == 1, 'Pub', IF(venue_type == 2, 'Nattklubb2', '')) LIKE (?)", 
       "%#{search}%", "%#{search}%", "%#{search}%", "%#{search}%"]) 
0

,你應該使用where([])而不是爲find

where([ "field like ?", field ]).order(). ... 

此外,使用pgSQL在你爲什麼不使用ilike代替likelower

在你的情況下,雖然搜索int或不int,我會使用不同的查詢。

search.to_i != 0

相關問題