/ / रेल पर रूबी - शीर्षक के भीतर शब्दों के लिए क्वेरी खोजें - रूबी, रूबी-ऑन-रेल -4, खोज, दायरा, फ़िल्टररिफिश

रेल पर रूबी - शीर्षक के भीतर शब्दों के लिए खोज क्वेरी - रूबी, रूबी-ऑन-रेल -4, खोज, दायरा, फ़िल्टररिफिश

मेरे आवेदन में मैं एक कर रहा हूँ scope/search पर :title के लिए खोज / फिल्टर मेरे रिकॉर्ड का। खोज स्वयं ठीक काम करती है, केवल एक चीज यह है कि उपयोगकर्ता को बिल्कुल लिखना होगा title और वे भीतर शब्द खोज नहीं सकते हैं :title.

उदाहरण के लिए यदि 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, सवाल था:

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: मैं उपयोग कर रहा हूँ Filterrific gem

मैं उपयोग करता हूं pg gem के लिये Production ENV और sqlite3 के लिये Development ENV

उत्तर:

उत्तर № 1 के लिए 1

जैसा कि इसमें वर्णित है w3schools लेख, LIKE के रूप में काम करता है:

WHERE CustomerName LIKE "a%" => Finds any values that starts with "a"
WHERE CustomerName LIKE "%a" => Finds any values that ends with "a"
WHERE CustomerName LIKE "%or%" => Finds any values that have "or" in any position
WHERE CustomerName LIKE "_r%" => Finds any values that have "r" in the second position
WHERE CustomerName LIKE "a_%_%" =>  Finds any values that starts with "a" and are at least 3 characters in length
WHERE ContactName LIKE "a%o" => Finds any values that starts with "a" and ends with "o"

मुझे बदलने की जरूरत है (e.gsub("*", "%") + "%").gsub(/%+/, "%"), सेवा मेरे: ("%" + e.gsub("*", "%") + "%").gsub(/%+/, "%") .

खोज करते समय (e.gsub("*", "%") + "%").gsub(/%+/, "%")परिणाम होगा (LOWER(posts.title) ILIKE "keyword%"), जहाँ तक ("%" + e.gsub("*", "%") + "%").gsub(/%+/, "%"), देना होगा (LOWER(posts.title) ILIKE "%keyword%")