我用下面的代碼現在:如何使用Rails進行搜索?
def self.search(query)
where("name like ?", "%#{query}%")
end
只爲名稱的作品,但基本上我需要它的一切(的出生,姓,名+姓等等日期)工作。您能否告訴我一些想法,我可以如何讓這段代碼更適合我的需求?
謝謝。
我用下面的代碼現在:如何使用Rails進行搜索?
def self.search(query)
where("name like ?", "%#{query}%")
end
只爲名稱的作品,但基本上我需要它的一切(的出生,姓,名+姓等等日期)工作。您能否告訴我一些想法,我可以如何讓這段代碼更適合我的需求?
謝謝。
在模型中,添加:
def self.search(cols, query)
tbl = self.arel_table
fq = tbl[cols.shift].matches("%#{query}%")
q = cols.inject(fq) do |acc, col|
acc.or(tbl[col].matches("%#{query}%"))
end
where(q)
end
然後你就可以使用它像:
User.search([:name, :surname], 'name')
將產生很好的SQL這樣的:
SELECT "users".* FROM "users" WHERE (("users"."name" LIKE '%name%'
OR "users"."surname" LIKE '%name%'))
如果你需要更細控制您的查詢,我有時會將以下便捷方法添加到AR中:
def self.arel_where(&block); where(yield self.arel_table); end
然後你可以這樣做:
User.arel_where do |tbl|
name = '%name%'; surname = '%sur%'
tbl[:name].matches(name).and(tbl[:surname].matches(surname))
end
退房https://github.com/activerecord-hackery/meta_search – Nithin
這應該'在哪裏(「名字怎麼樣?或者LIKE姓?或dob LIKE?「,」%#{query}%「,」%#{query}%「,」%#{query}%「)' – Pavan
我認爲'dob'這個不行,如果'dob''datetime '列類型 –