在我的應用程序中,我在:title
上執行scope/search
,查找搜索/過濾器我的記錄。搜索本身工作正常,只是用戶需要精確地編寫title
&他們無法搜索:title
中的單詞。Ruby on Rails - 在標題內搜索查詢
例如如果title
是:此搜索酷,用戶需要在開始搜索,並有完整的句子:此搜索進行搜索,他們可以不寫涼爽並獲得記錄中有很酷的標題。
我scope
樣子:
class Post < ActiveRecord::Base
scope :search_query, lambda { |query|
return nil if query.blank?
# condition query, parse into individual keywords
terms = query.downcase.split(/\s+/)
# replace "*" with "%" for wildcard searches,
# append '%', remove duplicate '%'s
terms = terms.map { |e|
(e.gsub('*', '%') + '%').gsub(/%+/, '%')
}
# configure number of OR conditions for provision
# of interpolation arguments. Adjust this if you
# change the number of OR conditions.
num_or_conditions = 1
where(
terms.map {
or_clauses = [
"LOWER(posts.title) LIKE ?"
].join(' OR ')
"(#{ or_clauses })"
}.join(' AND '),
*terms.map { |e| [e] * num_or_conditions }.flatten
)
}
我怎樣才能讓我的scope/query
因此,用戶可搜索title
內的單詞,並得到有他們搜索單詞的記錄?
我試圖與ILIKE
,但隨後的搜索停止開發工作,我想是因爲sqlite
它不能有ILIKE
,但在production
搜索工作,但仍無法搜索到標題中的單詞。
當我使用LIKE
,該sql
查詢是:
SELECT COUNT(count_column) FROM (SELECT 1 AS count_column FROM "posts" WHERE ((LOWER(posts.title) LIKE 'rails%')) LIMIT 50 OFFSET 0) subquery_for_count
而當我用ILIKE
,查詢是:使用im Filterrific gem
:
SELECT COUNT(count_column) FROM (SELECT 1 AS count_column FROM "posts" WHERE ((LOWER(posts.title) ILIKE 'rails%')) LIMIT 50 OFFSET 0) subquery_for_count
SQLite3::SQLException: near "ILIKE": syntax error: SELECT COUNT(count_column) FROM (SELECT 1 AS count_column FROM "posts" WHERE ((LOWER(posts.title) ILIKE 'rails%')) LIMIT 50 OFFSET 0) subquery_for_count
PS我使用pg gem
Production ENV
& sqlite3
爲Development ENV
咋一看說我,你應該使用ILIKE爲PG和sqlite3的 – marmeladze
謝謝@marmeladze,我試着用'ILIKE ',但那麼整個搜索都不起作用。即使之前有效。 – Rubioli
http://railscasts.com/episodes/37-simple-search-form可能是有用的 – Mark