6

To powinno być tak proste. Chcę pobrać nextval sekwencji ... nie jest to wartość domyślna ... nie jest to klucz podstawowy ... nie jest to klucz obcy. W rzadkich przypadkach potrzebuję numeru sekwencyjnego dla wartości dostarczonej przez użytkownika.Pobranie nextval z sekwencji przy użyciu activerecord w Ruby on Rails 3.2.14/Ruby 2.0.0/PostgreSQL 9.2.4

Próbowałem następujące:

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

i co mogę wrócić jest:

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

I za pomocą

@nextid[0]["nextval"] 

mogę uzyskać prawidłową wartość, ale nie wydaje się to właściwym sposobem podejścia do problemu. Szukałem, czytałem "Pro Active Record", który powiedział: "

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

, ale to nie zadziałało.

Wszelkie sugestie dotyczące "prawidłowego" (trybu szyn) do pobrania następnej z sekwencji w ROR będą bardzo mile widziane!

Odpowiedz

5

wierzę

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

jest poprawne rozwiązanie. Jak już wspomniałem w pierwotnym pytaniu, sprawdziłem książkę "Pro Active Record" i jest to zalecane rozwiązanie. Nadal nie jestem do końca pewien, w jaki sposób ActiveRecord nawiązuje połączenie lub czy jest jakaś konserwacja, którą muszę wykonać (np. Zamknięcie).

ActiveRecord używał metody "next_sequence_number", ale została uznana za przestarzałą.

7

Prawdopodobnie chcesz użyć select_value i sequence_name:

Xscrpt.connection.select_value("select nextval('#{Xscrpt.sequence_name}')").to_i 
Powiązane problemy