Rails,如何通过created_at对活动记录数组进行排序

时间:2013-09-17 11:24:48

标签: ruby-on-rails sorting activerecord

大家好,我有2个数组,它们具有不同的活动记录值,但来自同一个表但有不同的值,我想将两者合并,然后按created_at对它们进行排序,但没有得到任何线索,我是卡住。 请帮忙。

这是我的代码:

@find_user = EmployeeLeave.where(global_user_id: @allarray[i]).find(:all)
@all << @find_user
@find_referal_user = EmployeeLeave.where(referral_id: @allarray[i]).find(:all)
@all_entry << @find_referal_user
@total = @all + @all_entry

任何事情都不起作用请帮助我对@total进行排序。

4 个答案:

答案 0 :(得分:28)

您可以使用sort_by对数组进行排序。

在您的情况下,您可以执行以下操作:

@total.sort_by(&:created_at)

<强>更新

  • 删除@all&lt;&lt; @find_user和@all_entry&lt;&lt; @find_referal_user
    • 为什么?因为否则你将拥有一个包含多个数组的数组
  • 将@total替换为:@total = @find_user + @find_referal_user
    • 为什么?因为@total现在只包含一个包含所有对象的合并数组,可以通过.sort_by(&amp;:created_at)进行排序。

答案 1 :(得分:6)

您始终可以使用订购方式:

@total.order! 'created_at DESC'

答案 2 :(得分:0)

你可以这样做:

@total = EmployeeLeave.find(
  :all,
  :conditions => ["global_user_id = ? or referral_id = ?", @allarray[i], @allarray[i]],
  :order => "created_at ASC"
)

因此,它会找到EmployeeLeaveglobal_user_id eq referral_id的所有@allarray[i],并按created_at对结果进行排序。

答案 3 :(得分:0)

如果您需要降序排列,请使用reverse

@total.sort_by(&:created_at).reverse