Извлеките nextval из последовательности, используя activerecord в Ruby on Rails 3.2.14/Ruby 2.0.0/PostgreSQL 9.2.4
Это должно быть просто. Я хочу получить nextval последовательности... это не значение по умолчанию... это не первичный ключ... это не внешний ключ. В редких случаях мне нужен порядковый номер для поставленного пользователем значения.
Я пробовал следующее:
@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 будут очень оценены!
Ответы
Ответ 1
Я верю
ActiveRecord::Base.connection.execute("SELECT nextval('xscrpt_id_seq')")
- правильное решение. Как я уже сказал в своем первоначальном вопросе, я проверил книгу "Pro Active Record", и это их рекомендуемое решение. Я все еще не совсем уверен, как ActiveRecord создает соединение, или если мне требуется какое-либо обслуживание (например, его закрытие).
В ActiveRecord используется метод next_sequence_number, но он устарел.
Ответ 2
Вероятно, вы хотите использовать select_value
и sequence_name
:
Xscrpt.connection.select_value("select nextval('#{Xscrpt.sequence_name}')").to_i
Ответ 3
Это тоже работает:
@seq = Smodelname.find_by_sql(" select seq_name.nextval as id from dual ")[0][:id]