1

我正在使用 Postgres 作为数据库的 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”是一个整数。我已经为场地类型做了一个案例切换

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

现在我的问题是:当venue_type 是int 时,我如何在查询中找到某些内容?

4

3 回答 3

0

请尝试此代码。在这里,我在 where 子句中添加了 switch case。

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
于 2013-07-01T13:18:03.657 回答
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}%"])
于 2013-07-01T10:19:32.383 回答
0

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

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

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

在您的情况下,在搜索 int 或非 int 时,我会使用不同的查询。

什么时候search.to_i != 0

于 2013-07-01T10:36:12.267 回答