Als je prepare
. wilt gebruiken als dat zo is, moet je een paar wijzigingen aanbrengen:
-
Het PostgreSQL-stuurprogramma wil genummerde tijdelijke aanduidingen zien (
$1
,$2
, ...) geen vraagtekens en u moet uw voorbereide verklaring een naam geven:ActiveRecord::Base.connection.raw_connection.prepare('some_name', "DELETE FROM my_table WHERE id = $1")
-
De aanroepvolgorde is
prepare
gevolgd doorexec_prepared
:connection = ActiveRecord::Base.connection.raw_connection connection.prepare('some_name', "DELETE FROM my_table WHERE id = $1") st = connection.exec_prepared('some_name', [ id ])
De bovenstaande aanpak werkt voor mij met ActiveRecord en PostgreSQL, uw PG::Connection.open
versie zou moeten werken als je goed verbinding maakt.
Een andere manier is om zelf te citeren:
conn = ActiveRecord::Base.connection
conn.execute(%Q{
delete from my_table
where id = #{conn.quote(id)}
})
Dat is het soort dingen dat ActiveRecord meestal achter je rug doet.
Rechtstreekse interactie met de database is meestal een beetje een puinhoop met Rails, omdat de mensen van Rails denken dat je het nooit zou moeten doen.
Als je echt gewoon een rij probeert te verwijderen zonder interferentie, kun je delete
gebruiken :
delete()
[...]
De rij wordt eenvoudig verwijderd met een SQL DELETE
statement op de primaire sleutel van het record, en er worden geen callbacks uitgevoerd.
Dus je kunt dit gewoon zeggen:
MyTable.delete(id)
en je stuurt een simpele delete from my_tables where id = ...
in de database.