PG ::错误:错误:运算符不存在:整数~~未知

时间:2013-07-01 09:56:08

标签: ruby-on-rails postgresql search integer

我正在使用Postgres作为db在Rails项目中创建搜索功能。

这是我的代码

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时,如何在查询中找到一些内容?

3 个答案:

答案 0 :(得分:0)

我认为您必须使用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}%"])

答案 1 :(得分:0)

如果您使用的是rails 3.2或更高版本,则应使用where( [] )代替find

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

另外,在使用pgsql时,为什么不使用ilike而不是like使用lower

在你搜索int或不是int的情况下,我会使用不同的查询。

search.to_i != 0

答案 2 :(得分: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