16

こんにちは、同じテーブルのアクティブ レコードの値が異なる 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

4 に答える 4

32

sort_by を使用して配列をソートできます。

あなたの場合、次のことができます:

@total.sort_by(&:created_at)

アップデート:

  • @all << @find_user および @all_entry << @find_referal_user を削除します
    • なんで?そうしないと、複数の配列を持つ配列が作成されるためです
  • @total を次のように置き換えます: @total = @find_user + @find_referal_user
    • なんで?@total は、すべてのオブジェクトを含む 1 つのマージされた配列のみで構成されるため、.sort_by(&:created_at) でソートする準備ができています。
于 2013-09-17T11:35:15.373 に答える
7

order メソッドはいつでも使用できます。

@total.order! 'created_at DESC'
于 2014-06-17T20:17:20.937 に答える
0

この方法でそれを行うことができます:

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

EmployeeLeaveそのため、すべての whoglobal_user_idまたはreferral_ideqが検索@allarray[i]され、結果が でソートされcreated_atます。

于 2013-09-17T17:36:12.257 に答える