6

Это должно быть так просто. Я хочу получить nextval последовательности ... это не значение по умолчанию ... это не первичный ключ ... это не внешний ключ. В редких случаях мне нужен порядковый номер для поставленного пользователем значения.Извлечь nextval из последовательности с использованием activerecord в Ruby on Rails 3.2.14/Ruby 2.0.0/PostgreSQL 9.2.4

Я попытался следующие:

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

и то, что я вернусь есть:

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

И с помощью

@nextid[0]["nextval"] 

я могу получить правильное значение, но это не похоже на правильный способ подойти к проблеме. Я обыскал, я прочитал «Pro Active Record», который сказал использовать:

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

но, это не сработало.

Любые подсказки по правильному пути (Rails) для получения следующего значения из последовательности в ROR, были бы очень признательны!

ответ

5

Я считаю

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

является правильным решением. Как я уже сказал в своем первоначальном вопросе, я проверил книгу «Pro Active Record», и это их рекомендуемое решение. Я все еще не совсем уверен, как ActiveRecord делает соединение, или если мне требуется какое-либо обслуживание (например, его закрытие).

У ActiveRecord был метод «next_sequence_number», но он устарел.

7

Вы, вероятно, хотите использовать select_value и sequence_name:

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