このクエリは機能しますが、SQL インジェクションに対して完全にオープンです。
products = Product.find(pids,
:select => 'products.*, P.code',
:joins => "left join product_dist_match P on
(P.pid = products.pid and P.cid = #{cid})",
)
cid 変数を適切にエスケープするにはどうすればよいですか? conditions
パラメータは、この目的のためにフォーマットを許可しますが、許可し['foo = ?', bar]
ませjoins
ん。
find_by_sql
モデルのデフォルト スコープ (DRY ではない) の一部である結合と条件を追加する必要があるため、使用したくありません。
編集:私のテーブル構造は本質的にこれです:
products: pid (primary key)
product_dist_match: pid, cid, code
customers (not used in the query): cid (primary key)
これは読み取り専用のデータベースであり、Rails の関与は限定的であることに注意してください。すべてのテーブルにモデルを設定するつもりはありません。SQL インジェクション攻撃にさらされることなく、上記の単純なクエリを実行したいだけです。