6

Questo dovrebbe essere COSÌ semplice. Voglio recuperare il valore successivo di una sequenza ... non è un valore predefinito ... non è una chiave primaria ... non è una chiave esterna. In rari casi, ho bisogno di un numero di sequenza per un valore fornito dall'utente.Recupera il nextval da una sequenza utilizzando activerecord in Ruby on Rails 3.2.14/Ruby 2.0.0/PostgreSQL 9.2.4

ho provato la seguente:

@nextid = ActiveRecord::Base.connection.execute("SELECT nextval('xscrpt_id_seq')") 

e quello che torno a dire:

#<PG::Result:0x007fe668a854e8 @connection=#<PG::Connection:0x00000003aeff30>> 

E utilizzando

@nextid[0]["nextval"] 

posso ottenere il valore corretto, ma non sembra il modo giusto per affrontare il problema. Ho cercato, ho letto "Pro Active Record", che ha detto di usare:

M_script.find_by_sql("SELECT nextval('xscript_id_seq')") 

ma, che non ha funzionato.

Qualsiasi suggerimento sul "corretto" (modo Rails) per recuperare un valore successivo da una sequenza in ROR, sarebbe molto apprezzato!

risposta

5

credo

ActiveRecord::Base.connection.execute("SELECT nextval('xscrpt_id_seq')") 

è la soluzione corretta. Come ho detto nella mia domanda iniziale, ho controllato il libro "Pro Active Record" ed è la loro soluzione raccomandata. Non sono ancora esattamente sicuro di come ActiveRecord stia effettuando la connessione, o se c'è bisogno di manutenzione (come chiuderlo).

ActiveRecord utilizzato per avere un metodo "next_sequence_number", ma che è stato deprecato.

7

Probabilmente si desidera utilizzare select_value e sequence_name:

Xscrpt.connection.select_value("select nextval('#{Xscrpt.sequence_name}')").to_i 
Problemi correlati