Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Pencarian beberapa kata dengan Ruby, dan MySQL

Pertama, saya sangat menganjurkan Anda untuk memindahkan logika Model ke Models. Alih-alih membuat logika pencarian ke dalam Controller, buat metode #search ke dalam mode Quote Anda.

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

dan pengontrol Anda menjadi

# 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

Sekarang, kembali ke masalah awal. Logika pencarian Anda yang ada melakukan kesalahan yang sangat buruk:ini secara langsung menginterpolasi nilai saat membuka kode Anda ke injeksi SQL. Dengan asumsi Anda menggunakan Rails 3, Anda dapat memanfaatkan sintaks #where yang baru.

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

Ini sedikit topik lanjutan. Saya ingin memahami apa combined_scope + inject tidak, saya sarankan Anda untuk membaca artikel Kurus di Lingkup .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Memasukkan gambar ke dalam database

  2. Bagaimana cara menyalin tabel mysql ke yang lain di cakephp?

  3. Kaskade INNODB saat dihapus dan diperbarui

  4. Zen cart:Saya ingin menanyakan dari kategori tertentu nama, harga, gambar, deskripsi, dan atribut produknya

  5. Milvus :melatih dan mencari di mesin terpisah