5


0

Rails-SQLパラメーターのエスケープ

私はレールモデルでいくつかの単純なSQLを実行しています(純粋主義者にとっては、これは複雑なSQLのためだけです:)

私はfind * / conditionメソッドを使用していないので、それを行うために直接使用できるヘルパーメソッドはありますか?

2 Answer


6


接続オブジェクトのhttp://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/Quoting.html#M001483 [quote]メソッドは文字列をエスケープします。 クエリを作成するときは、http://apidock.com/rails/ActiveRecord/Sanitization/ClassMethods/sanitize_sql_for_conditions [sanitize_sql_for_conditions]を使用してActiveRecord条件ハッシュまたは配列をSQL WHERE句に変換します。

http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/DatabaseStatements.html [`ActiveRecord

ConnectionAdapters :: DatabaseStatements`]のメソッドは、直接クエリ、特に` select_`で始まるクエリに便利です。


0


Railsは、http://api.rubyonrails.org/classes/ActiveRecord/Sanitization/ClassMethods.html#method-i-sanitize_sql_for_conditions [sanitize_sql_for_conditions]を内部的に使用して、プレースホルダーを処理します。 もちろん、このメソッドは保護されているため、ActiveRecordモデルの外部で(きれいに)使用することはできません。 http://ruby-doc.org/core-1.9.3/Object.html#method-i-send [send]を使用して保護を回避できます。

escaped_string = Model.send(:sanitize_sql_for_conditions, [
        'id = ? and name = ?',
        params[:id], params[:name]
    ]
)