特定のリストで、共通名または内部名を持つすべてのウィジェットを検索したいquery_list
。できます
# Consider query_list = ["a","b","c"]
qlist = '(' + query_list.join(",") + ')'
# this makes
widgets = Widget.find_by_sql("SELECT * FROM widgets
WHERE common_name IN #{qlist} OR internal_name IN #{qlist}")
今、私はいくつかの質問があります:
- 上記のfind_by_sqlはSQLインジェクション攻撃に関して安全ですか?に危険なものを入れることができるようです
query_list
。- 書いてみませんか
.find_by_sql(["SELECT * FROM widgets WHERE common_name IN ? OR internal_name IN ?", ["a","b","c"], ["a","b","c"] ])
- 安全でない場合、安全にすることはできますか?
- 書いてみませんか
- 必要がなければ、生のSQLを記述したくない。のように、で
AND
条件を記述できることはわかっています。findを使用して条件を作成することもできますか?find
.find(:conditions=>{:internal_name => ['a','b','c'], :common_name => ['a','b','c']})
OR
- 使って
where
みませんか?これは使用とどう違うのfind
ですか?