Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

रूबी, और MySQL के साथ एकाधिक शब्द खोज

सबसे पहले, मैं आपको मॉडल के तर्क को मॉडल में स्थानांतरित करने के लिए दृढ़ता से प्रोत्साहित करता हूं। कंट्रोलर में सर्च लॉजिक बनाने के बजाय, अपने कोट मोड में #search मेथड बनाएं।

class Quote
  def self.search(query)
    ...
  end
end

और आपका नियंत्रक बन जाता है

# receives a string, splits it in a array of words, create the 'conditions'
# query, and send it to ActiveRecord
def search
  @quotes = Quote.search(params[:query])
end

अब, मूल समस्या पर वापस। आपका मौजूदा खोज तर्क बहुत खराब गलती करता है:यह सीधे आपके कोड को SQL इंजेक्शन में खोलने के मूल्य को प्रक्षेपित करता है। मान लें कि आप Rails 3 का उपयोग करते हैं, तो आप नए #where सिंटैक्स का लाभ उठा सकते हैं।

class Quote
  def self.search(query)
    words = query.to_s.strip.split
    words.inject(scoped) do |combined_scope, word|
      combined_scope.where("quote LIKE ?", "%#{word}%")
    end
  end
end

यह थोड़ा उन्नत विषय है। मैं आपको समझना चाहता हूं कि combined_scope . क्या है + inject मैं आपको द स्किनी ऑन स्कोप्स



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. विकास के दौरान त्वरित कॉलम/इंडेक्स निर्माण के लिए MySQL ट्यूनिंग

  2. Laravel OrderBy रिलेशनशिप काउंट

  3. mysql में अपलोड होने पर एक्सेल से तारीख बदल जाती है

  4. n . से शुरू होने वाले mySQL में प्रत्येक nth पंक्ति का चयन कैसे करें

  5. मुझे कैसे पता चलेगा कि मेरी तालिका MyISAM या Innodb है?