我正在尝试获取表格中记录的订单号。我有一个名为Survey的模型。数据库中有4个调查。如果我运行<script src="https://maps.googleapis.com/maps/api/js"></script>
<button onclick="position()" id="button">press</button>
<div id="googleMap" style="border: 2px solid #3872ac;"></div>
我会
Survey.all
我正在寻找一种方法来查找特定记录的订单。例如,我们假设有一个名为 => #<ActiveRecord::Relation
[#<Survey id: 138, presentation_id: 300, created_at: "2015-08-24 20:51:25", updated_at: "2015-08-24 20:57:07", current_question_id: 417, complete: true, survey_taker_name: "">,
#<Survey id: 136, presentation_id: 297, created_at: "2015-08-24 20:25:55", updated_at: "2015-08-24 20:27:36", current_question_id: 392, complete: true, survey_taker_name: "try 1">,
#<Survey id: 141, presentation_id: 302, created_at: "2015-08-25 17:48:38", updated_at: "2015-08-25 17:49:31", current_question_id: 417, complete: true, survey_taker_name: "">
]>
的方法。如果我打电话:
record
我会回来Survey.find(141).record
。如果我打电话
3
我会回来2。
Rails中有类似的方法吗?
答案 0 :(得分:1)
Survey.all.map(&:id).index(141) + 1
应该显示3。
Survey.all.map(&:id).index(136) + 1
它应该显示回来。
答案 1 :(得分:0)
您可以通过调用以下内容按顺序获取数组中排序的任何项目:
Survey.all[number]
0是集合中的第一个项目:
Survey.all[0] # first item
Survey.all[1] # second item
Survey.all[2] # third item
答案 2 :(得分:0)
你可以这样做:
@surveys = Survey.select("row_number() OVER(ORDER BY created_at DESC) AS row_num, *")
现在,你可以这样做@surveys.first.row_num
。
示例:
2.2.1 :002 > a = Account.select("row_number() OVER(ORDER BY created_at DESC) AS row_num, id, email").limit(4)
Account Load (0.7ms) SELECT row_number() OVER(ORDER BY created_at DESC) AS row_num, id, email FROM "accounts" WHERE "accounts"."deleted_at" IS NULL LIMIT 4
2.2.1 :004 > a.first.row_num
=> 1
2.2.1 :005 > a.last.row_num
=> 4
答案 3 :(得分:0)
我建议您不要这样做,但实现这一目标的效率非常低,可以通过以下方式完成:
Survey.find(141).record # => 3
def record
Survey.all.each_with_index.map{|object, index| index if object == self}.reject{|o| o.nil?}.first
end
同样,这是非常低效的,并且正如其他人所说,你不应该在某个位置通过其顺序检索集合。默认范围和其他因素可能会不断改变Rails中生成的集合的顺序,因此,如果您实际上是基于此代码,请重新查看您的问题。