Diese Abfrage funktioniert, ist aber völlig offen für SQL-Injection:Rails Active entkommen Variable mitmachen Klausel
products = Product.find(pids,
:select => 'products.*, P.code',
:joins => "left join product_dist_match P on
(P.pid = products.pid and P.cid = #{cid})",
)
Wie kann ich die cid Variable richtig entkommen? Der Parameter conditions
ermöglicht das Format ['foo = ?', bar]
für diesen Zweck, aber joins
nicht.
Ich möchte nicht find_by_sql
verwenden, denn dann müsste ich die Joins und Bedingungen hinzufügen, die Teil des Standardumfangs des Modells sind (das wäre nicht DRY).
Edit: Meine Tabellenstruktur ist im Wesentlichen diese:
products: pid (primary key)
product_dist_match: pid, cid, code
customers (not used in the query): cid (primary key)
Beachten Sie, dass dies eine schreibgeschützte Datenbank, die nur Schienen hat eine begrenzte Beteiligung mit. Ich plane nicht, Modelle für alle Tische aufzustellen; Ich möchte nur eine einfache Abfrage wie oben beschrieben durchführen, ohne mich SQL Injection-Angriffen auszusetzen.
Können Sie Ihre Tabellenstruktur beschreiben? das könnte möglich sein, indem Hash-Bedingungen verwendet werden – davidrac