ActiveRecord::Base.connection
hat eine quote
Methode, die einen Zeichenfolgenwert (und optional das Spaltenobjekt) annimmt. Sie können also Folgendes sagen:
ActiveRecord::Base.connection.execute(<<-EOQ)
UPDATE foo
SET bar = #{ActiveRecord::Base.connection.quote(baz)}
EOQ
Hinweis: Wenn Sie sich in einer Rails-Migration oder einem ActiveRecord-Objekt befinden, können Sie dies auf Folgendes verkürzen:
connection.execute(<<-EOQ)
UPDATE foo
SET bar = #{connection.quote(baz)}
EOQ
UPDATE: Wie @kolen hervorhebt, sollten Sie exec_update
stattdessen verwenden. Dadurch wird das Angebot für Sie erledigt und es wird auch ein Speicherverlust vermieden. Die Signatur funktioniert allerdings etwas anders:
connection.exec_update(<<-EOQ, "SQL", [[nil, baz]])
UPDATE foo
SET bar = $1
EOQ
Hier ist der letzte Parameter ein Array von Tupeln, die Bindungsparameter darstellen. In jedem Tupel ist der erste Eintrag der Spaltentyp und der zweite der Wert. Sie können nil
für den Spaltentyp angeben, und Rails wird normalerweise das Richtige tun.
Es gibt auch exec_query
, exec_insert
und exec_delete
, je nachdem, was Sie brauchen.