Se você quiser usar
prepare assim, você precisará fazer algumas alterações:-
O driver PostgreSQL deseja ver os espaços reservados numerados ($1,$2, ...) não pontos de interrogação e você precisa dar um nome à sua declaração preparada:
ActiveRecord::Base.connection.raw_connection.prepare('some_name', "DELETE FROM my_table WHERE id = $1") -
A sequência de chamada éprepareseguido porexec_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 ])
A abordagem acima funciona para mim com ActiveRecord e PostgreSQL, seu
PG::Connection.open versão deve funcionar se você estiver se conectando corretamente. Outra maneira é fazer a citação você mesmo:
conn = ActiveRecord::Base.connection
conn.execute(%Q{
delete from my_table
where id = #{conn.quote(id)}
})
Esse é o tipo de coisa que o ActiveRecord geralmente faz nas suas costas.
Interagir diretamente com o banco de dados tende a ser um pouco confuso com o Rails, já que o pessoal do Rails acha que você nunca deveria fazer isso.
Se você realmente está apenas tentando excluir uma linha sem interferência, pode usar
delete :
excluir()
[...]
A linha é simplesmente removida com um SQLDELETEinstrução na chave primária do registro e nenhum retorno de chamada é executado.
Então você pode apenas dizer isso:
MyTable.delete(id)
e você enviará um simples
delete from my_tables where id = ... no banco de dados.