寻找一个返回关系中对象的订单号的rails / ruby​​方法

时间:2015-08-25 19:10:58

标签: ruby-on-rails ruby ruby-on-rails-4 activerecord

我正在尝试获取表格中记录的订单号。我有一个名为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中有类似的方法吗?

4 个答案:

答案 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中生成的集合的顺序,因此,如果您实际上是基于此代码,请重新查看您的问题。