prepare
を使用する場合 その場合は、いくつか変更を加える必要があります:
-
PostgreSQLドライバーは、番号付きのプレースホルダー(
$1
)を確認したいと考えています。 、$2
、...)疑問符ではなく、準備したステートメントに名前を付ける必要があります:ActiveRecord::Base.connection.raw_connection.prepare('some_name', "DELETE FROM my_table WHERE id = $1")
-
呼び出しシーケンスは
prepare
です 続いてexec_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 ])
上記のアプローチは、ActiveRecordとPostgreSQL、つまりPG::Connection.open
で機能します。 正しく接続していれば、バージョンは機能するはずです。
もう1つの方法は、自分で見積もりを行うことです。
conn = ActiveRecord::Base.connection
conn.execute(%Q{
delete from my_table
where id = #{conn.quote(id)}
})
これは、ActiveRecordが通常あなたの後ろで行っているようなことです。
Railsの人々はあなたがそれをすべきだとは思わないので、データベースと直接対話することはRailsを少し混乱させる傾向があります。
本当に干渉なしに行を削除しようとしている場合は、delete
を使用できます。 :
delete()
[...]
行はSQL
DELETE
で簡単に削除されます レコードの主キーに関するステートメントであり、コールバックは実行されません。
だからあなたはこれを言うことができます:
MyTable.delete(id)
そして、単純なdelete from my_tables where id = ...
を送信します。 データベースに。