sql >> データベース >  >> RDS >> Mysql

Rubyと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. Doctrineを使用してデッドロック後にトランザクションを再試行するにはどうすればよいですか?

    2. Laravel 5:整合性制約違反:1452子行を追加または更新できません:外部キー制約が失敗します

    3. 交差するタイムスパンの平坦化

    4. 小数点以下2桁のみになるように数値をフォーマットするにはどうすればよいですか?