Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Tìm kiếm nhiều từ với Ruby và MySQL

Đầu tiên, tôi đặc biệt khuyến khích bạn chuyển logic của Mô hình thành Mô hình. Thay vì tạo logic tìm kiếm vào Bộ điều khiển, hãy tạo phương thức #search vào chế độ Trích dẫn của bạn.

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

và bộ điều khiển của bạn trở thành

# 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

Bây giờ, trở lại vấn đề ban đầu. Logic tìm kiếm hiện tại của bạn mắc một lỗi rất nặng:nó nội suy trực tiếp giá trị mở mã của bạn vào SQL injection. Giả sử bạn sử dụng Rails 3, bạn có thể tận dụng cú pháp #where mới.

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

Đó là một chút chủ đề nâng cao. Tôi bạn muốn hiểu combined_scope là gì + inject không, tôi khuyên bạn nên đọc bài viết The Skinny on Scopes .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kết nối TCP MySQL

  2. Đọc / ghi các phần tách bằng Zend_Db

  3. đường ray 3; activerecord; ở đâu; Điều kiện KHÔNG BẰNG NHAU so sánh giữa hai cột trong cơ sở dữ liệu

  4. Làm thế nào để triển khai bộ đệm ẩn sau ghi nền / không đồng bộ trong PHP?

  5. Tôi đặt mã hóa ký tự ở đâu trong ứng dụng Java Swing để có thể viết tiếng Hindi vào cơ sở dữ liệu MySQL?