搜索表

时间:2015-09-12 12:39:06

标签: sql ruby-on-rails ruby postgresql

我需要创建一个搜索特定表tournaments的方法,该方法应搜索以下列: - 名称 - 地址 - starts_on - ends_on - 城市 - 邮政编码

我不确定如何做到这一点,到目前为止我已经在我的锦标赛模型中编写了一个看起来像这样的类方法:

 def self.search(term)
    Tournament.where('name ILIKE ? OR starts_on ILIKE ? OR ends_on ILIKE ?' , "%#{term}%")
  end

我怎样才能和最好的方法是什么?

2 个答案:

答案 0 :(得分:0)

你可以使用这样的参数:

def self.search(term)
    Tournament.where('name ILIKE :theString OR starts_on ILIKE :theString OR ends_on ILIKE :theString' ,theString: "%#{term}%")
end

答案 1 :(得分:0)

您的搜索字段是否为离散字段?

你可以根据每个搜索词的存在来链接'where'方法。

def self.search(name, starts_on, ends_on, city, postcode)  
  terms = {name: name, 
           starts_on: starts_on, 
           ends_on: ends_on, 
           city: city, 
           post_code: postcode }
  @tournaments = Tournament.all
  terms.each do |term, value|
     @tournaments = @tournaments.where("#{term.to_s} ILIKE ?", value) if value
  end
  @tournaments
end