Rails, как отсортировать массив активных записей с помощью create_at

Привет, у меня есть 2 массива s, имеющих разные значения активных записей из одной таблицы, но имеющие разные значения. Я хочу объединить оба, а затем отсортировать их по 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.

Ответ 1

Вы можете отсортировать массив с помощью sort_by.

В вашем случае вы можете сделать следующее:

@total.sort_by(&:created_at)

Update:

  • Удалить @all < < @find_user и @all_entry < @find_referal_user
    • Почему? Поскольку в противном случае у вас будет массив с несколькими массивами
  • Заменить @total: @total = @find_user + @find_referal_user
    • Почему? Поскольку @total теперь будет состоять только из одного объединенного массива со всеми объектами, готового к сортировке через .sort_by (&: created_at).

Ответ 2

Вы всегда можете использовать метод заказа:

@total.order! 'created_at DESC'

Ответ 3

Вы можете сделать это следующим образом:

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

Таким образом, он найдет все EmployeeLeave, где global_user_id или referral_id eq @allarray[i] и отсортирует результат created_at.