Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3.2 在RubyonRails 3.2.14/Ruby2.0.0/PostgreSQL 9.2.4中使用activerecord从序列中检索nextval_Ruby On Rails 3.2_Rails Activerecord_Postgresql 9.2_Rails Postgresql - Fatal编程技术网

Ruby on rails 3.2 在RubyonRails 3.2.14/Ruby2.0.0/PostgreSQL 9.2.4中使用activerecord从序列中检索nextval

Ruby on rails 3.2 在RubyonRails 3.2.14/Ruby2.0.0/PostgreSQL 9.2.4中使用activerecord从序列中检索nextval,ruby-on-rails-3.2,rails-activerecord,postgresql-9.2,rails-postgresql,Ruby On Rails 3.2,Rails Activerecord,Postgresql 9.2,Rails Postgresql,这应该很简单。我想检索序列的下一个部分。。。这不是默认值。。。它不是主键。。。这不是外键。在极少数情况下,我需要用户提供的值的序列号 我尝试了以下方法: @nextid = ActiveRecord::Base.connection.execute("SELECT nextval('xscrpt_id_seq')") 我得到的回报是: #<PG::Result:0x007fe668a854e8 @connection=#<PG::Connection:0x00000003aeff3

这应该很简单。我想检索序列的下一个部分。。。这不是默认值。。。它不是主键。。。这不是外键。在极少数情况下,我需要用户提供的值的序列号

我尝试了以下方法:

@nextid = ActiveRecord::Base.connection.execute("SELECT nextval('xscrpt_id_seq')")
我得到的回报是:

#<PG::Result:0x007fe668a854e8 @connection=#<PG::Connection:0x00000003aeff30>>
我可以得到正确的值,但这似乎不是解决问题的正确方法。我搜索过,我读过“主动记录”,上面写着:

M_script.find_by_sql("SELECT nextval('xscript_id_seq')")
但是,这不起作用

任何关于从ROR序列中检索下一个字符串的“正确”(Rails方式)的提示都将非常感谢

我相信:

ActiveRecord::Base.connection.execute(“选择nextval('xscrpt_id_seq'))
这是正确的解决方案。正如我在最初的问题中所说,我查阅了《主动记录》一书,这是他们推荐的解决方案。我仍然不确定ActiveRecord是如何建立连接的,或者是否需要进行任何维护(例如关闭它)


ActiveRecord过去有一个
next\u sequence\u number
方法,但该方法已被弃用。

您可能希望使用
选择\u value
sequence\u name

Xscrpt.connection.select_value("select nextval('#{Xscrpt.sequence_name}')").to_i
这也有效:

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

至少对于Rails 5.1.7,要小心:

ActiveRecord::Base.connection.select_value
仅为第一次调用增加事务中的序列。当您多次执行它时,您将始终得到相同的值,并且序列不会递增

ActiveRecord::Base.connection.execute

不缓存并按预期工作

select_value函数非常有用,无需像[0]['nextval'那样获取。谢谢@kbrock
ActiveRecord::Base.connection.execute