我需要创建一个搜索特定表tournaments
的方法,该方法应搜索以下列:
- 名称
- 地址
- starts_on
- ends_on
- 城市
- 邮政编码
我不确定如何做到这一点,到目前为止我已经在我的锦标赛模型中编写了一个看起来像这样的类方法:
def self.search(term)
Tournament.where('name ILIKE ? OR starts_on ILIKE ? OR ends_on ILIKE ?' , "%#{term}%")
end
我怎样才能和最好的方法是什么?
答案 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