In meiner Anwendung mache ich eine scope/search
auf :title
für eine Suche/Filter meiner Aufzeichnungen. Die Suche selbst funktioniert gut, nur die Sache ist, dass Benutzer genau die title
& schreiben müssen, die sie nicht innerhalb der :title
suchen können.Ruby on Rails - Suche Suche nach Wörtern innerhalb des Titels
Zum Beispiel, wenn die title
ist:Diese Suche ist kühl, Benutzer müssen die Suche und haben den kompletten Satz starten: Diese Suche zu suchen und sie können nicht schreiben kühlen ist und erhalten Aufzeichnungen, die haben, ist im Titel cool.
Mein scope
wie folgt aussieht:
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
)
}
Wie kann ich meine scope/query
so Benutzer machen Wörter innerhalb des title
suchen und Aufzeichnungen erhalten, die Worte, die sie für haben gesucht hat?
ich mit ILIKE
versucht, aber dann stoppen die Suche in der Entwicklung arbeiten, ich glaube, seine wegen sqlite
nicht ILIKE
haben kann, aber in production
die Suche gearbeitet, aber noch nicht für Wörter innerhalb Titel suchen können.
Als ich LIKE
verwenden, die sql
Abfrage lautete:
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
Während, wenn ich ILIKE
verwendet, die Abfrage war:
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: Im Filterrific gem
mit
Ich benutze pg gem
für Production ENV
& sqlite3
für Development ENV
ein kurzer Blick sagt mir geben würde, Sie ILIKE für pg und sqlite3 – marmeladze
Dank @marmeladze verwenden sollte, habe ich versucht, mit 'ILIKE ', aber dann funktioniert die ganze Suche nicht. Sogar was vorher funktioniert hat. – Rubioli
http://railscasts.com/episodes/37-simple-search-form könnte nützlich sein – Mark