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
.