Domanda

Ho una tabella creata in una migrazione (solo per semplificare il problema) simile a questa:

create_table :test_defaults, :force => true do |table|
     table.integer   :failure,       :default => -1, :null => false
end

Quindi, una colonna denominata fallimento.Quando eseguo questo comando rails:

td = TestDefault.create!

JRuby fallisce con:

ActiveRecord::StatementInvalid: ActiveRecord::JDBCError: ERROR: null value in column
"failure" violates not-null constraint: INSERT INTO "test_defaults" ("failure")
VALUES(NULL) RETURNING "id"

mentre la versione Ruby riesce con una query come questa:

INSERT INTO "test_defaults" ("failure") VALUES(-1) RETURNING "id"

Sto correndo:

ruby 1.8.7, 
rails 2.2.2, 
jruby 1.5.6, 
activerecord-jdbc-adapter (1.1.0)
activerecord-jdbcpostgresql-adapter (1.1.0)
jdbc-postgres (8.4.702)

I suggerimenti sono apprezzati.Non sono riuscito a trovare nulla di utile su Google e non so nemmeno a chi segnalare il bug.

Saluti.

MODIFICARE: Ah.Sembra che accada solo con valori predefiniti negativi.Zero e maggiore vanno bene.

EDIT2: Dalla mia risposta di seguito, si tratta di un problema di codice attorno alle parentesi sui valori predefiniti negativi in ​​Postgres 8.4.Se qualcuno potesse suggerire un modo per aggirare questo problema senza attendere un aggiornamento del gem (come dire a Postgres di rimuovere quelle parentesi), sarebbe molto apprezzato.

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top