Hvis du vil bruge prepare
sådan bliver du nødt til at foretage et par ændringer:
-
PostgreSQL-driveren ønsker at se nummererede pladsholdere (
$1
,$2
, ...) ikke spørgsmålstegn, og du skal give dit forberedte udsagn et navn:ActiveRecord::Base.connection.raw_connection.prepare('some_name', "DELETE FROM my_table WHERE id = $1")
-
Opkaldssekvensen er
prepare
efterfulgt afexec_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 ])
Ovenstående tilgang fungerer for mig med ActiveRecord og PostgreSQL, din PG::Connection.open
version skulle fungere, hvis du opretter forbindelse korrekt.
En anden måde er at lave citatet selv:
conn = ActiveRecord::Base.connection
conn.execute(%Q{
delete from my_table
where id = #{conn.quote(id)}
})
Det er den slags ting, ActiveRecord normalt laver bag din ryg.
Direkte interaktion med databasen har en tendens til at være lidt af et rod med Rails, da Rails-folkene ikke synes, du nogensinde skal gøre det.
Hvis du virkelig bare prøver at slette en række uden forstyrrelser, kan du bruge delete
:
delete()
[...]
Rækken fjernes simpelthen med en SQL DELETE
sætning på postens primære nøgle, og ingen tilbagekald udføres.
Så du kan bare sige dette:
MyTable.delete(id)
og du sender en simpel delete from my_tables where id = ...
ind i databasen.