Ich bin seit einiger Zeit verwirrt über den Unterschied zwischen der Verwendung eines Fragezeichens, z.Was ist der Unterschied zwischen der Verwendung? und% beim Desinfizieren von Feldern in ActiveRecord?
Foo.find(:all, :conditions => ['bar IN (?)', @dangerous])
und unter Verwendung von Sprintf-Stil-Feldtypen, z.
Bar.find(:all, :conditions => ['qux IN (%s)', @dangerous])
in Desinfektionseingängen. Gibt es irgendeinen Sicherheitsvorteil, wenn Sie wissen, dass Sie nach einer Zahl suchen - wie einer ID - und nicht nach einer Zeichenkette,% d über verwenden? Oder fragen Sie einfach nach einem Big Nasty Error, wenn stattdessen eine Zeichenkette erscheint ?
Ändert sich das überhaupt mit der neueren .where-Syntax in Rails 3 und 4?
ich wusste nicht einmal, dass dies in rails2 möglich ist – phoet
@muistooshort, es scheint zumindest in Rails 3 funktioniert. Guter Punkt über zukünftige Proofing, da es nirgendwo dokumentiert scheint. –
In 3+ würde ich 'where (: bar => @dangerous)' auf jeden Fall sagen, das wird das Richtige tun, wenn '@ dangerous' ein nicht-leeres Array ist (aber ach, [etwas dummes] (http://stackoverflow.com/a/12946338/479863) wenn es ein leeres Array ist). –