Retrieve the nextval from a sequence using activerecord in Ruby on Rails 3.2.14 / Ruby 2.0.0 / PostgreSQL 9.2.4

时光毁灭记忆、已成空白 提交于 2019-12-10 01:44:10

问题


This should be SO simple. I want to retrieve the nextval of a sequence... it's not a default value... it's not a primary key... it's not a foreign key. In rare cases, I need a sequence number for a user supplied value.

I've tried the following:

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

and what I get back is:

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

And by using

@nextid[0]["nextval"]

I can get the correct value, but it doesn't seem like the right way to approach the problem. I've searched, I read "Pro Active Record", which said to use:

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

but, that didn't work.

Any hints on the "correct" (Rails way) to retrieve a nextval from a sequence in ROR, would be very appreciated!


回答1:


I believe

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

is the correct solution. As I said in my original question, I checked the book "Pro Active Record" and it is their recommended solution. I'm still not exactly sure how ActiveRecord is making the connection, or if there's any maintenance I need to do (such as closing it).

ActiveRecord used to have a "next_sequence_number" method, but that has been deprecated.




回答2:


You probably want to use select_value and sequence_name:

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



回答3:


This works too:

 @seq = Smodelname.find_by_sql(" select seq_name.nextval as id from dual ")[0][:id]


来源:https://stackoverflow.com/questions/17954524/retrieve-the-nextval-from-a-sequence-using-activerecord-in-ruby-on-rails-3-2-14

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!