2016-06-13 8 views
1

私は引数でキー値のペアを取り、LIKEクエリでアクティブなレコードモデルを検索する検索メソッドを持っています。しかし、私はそれを動作させることができません。それは鍵の引数を適切に取っていません。それは(name LIKE '%air%')Railsの動的属性LIKE句で

私はこの仕事を得ることができ方法はありますを発射すべきであるのに対し、それが発火するクエリが('name' LIKE '%air%')ある

def search(key,value) 
    where('? LIKE ?',key,"%#{value}%") 
end 

これは私の方法は、次のようになりますか?

答えて

0

この

def search(key,value) 
    where("#{key} LIKE ?","%#{value}%") 
end 
+0

はい!私が逃した作品..愚かなこと。 –

+0

安全ではありません! @ venの答えを見てください。 – s2t2

3

警告のように試してみてください。@MKumarによって提案された解決策は非常に危険です。 keyがユーザ入力の場合は、SQLインジェクションを許可しただけです。

def search(key, value) 
    where("#{key} LIKE ?", "%#{value}%") 
end 
search("IS_ADMIN == 1 --", "") 

おっと!

これを行うより良い方法は、Arelテーブルを使用することです。

def search(key, value) 
    column = Model.arel_table[key.to_sym] # index into the columns, via a symbol 
    where(column.matches("%#{value}%")) 
end 

これはSQLインジェクションを生成できません。