6

這應該很簡單。我想檢索nextval的序列......它不是默認值......它不是主鍵......它不是外鍵。在極少數情況下,我需要一個用戶提供值的序列號。在Ruby on Rails 3.2.14/Ruby 2.0.0/PostgreSQL中使用activerecord從序列中檢索nextval 9.2.4

我已經試過如下:

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

什麼,我得到的回覆是:通過使用

@nextid[0]["nextval"] 

我能得到正確的值

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

而且,而是它似乎不是解決問題的正確方法。我搜索了一下,我讀了「Pro Active Record」,它說使用:

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

但是,這並沒有奏效。

任何提示「正確」(Rails的方式)從ROR序列檢索nextval,將非常感激!

回答

5

我相信

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

是正確的解決方案。正如我在我原來的問題中所說的,我檢查了「Pro Active Record」這本書,這是他們推薦的解決方案。我仍然不確定ActiveRecord如何進行連接,或者需要進行任何維護(例如關閉它)。

ActiveRecord過去有一個「next_sequence_number」方法,但已被棄用。

7

你可能想使用select_valuesequence_name

Xscrpt.connection.select_value("select nextval('#{Xscrpt.sequence_name}')").to_i 
相關問題