#ruby-on-rails #ruby-on-rails-3 #sorting #will-paginate
#ruby-on-rails #ruby-on-rails-3 #сортировка #будет разбит на страницы
Вопрос:
Я пытаюсь упорядочить свои результаты в порядке убывания по дате created_at, но предложение order., похоже, не работает. Боюсь, я смотрел на это слишком долго и мог бы полностью извлечь выгоду из второй (или третьей или более) пары глаз.
mailbox_controller.rb
:
def show
current_user = User.find(session[:user_id])
@folder = Folder.where("user_id = #{current_user.id}").first
@msgs = @folder.messages.order("created_at DESC")
@messages = @msgs.where(["deleted IS NULL"] || ["deleted = ?", false]).paginate :per_page => 5, :page => params[:page]
end
Комментарии:
1. Вы пробовали объединить последние две строки кода в одну строку (где сначала, затем порядок? Просто подумал, что методы «порядок» и «где» могут конфликтовать друг с другом.
Ответ №1:
@msgs = @folder.messages.order("created_at DESC")
@messages = @msgs.where(["deleted IS NULL"] || ["deleted = ?", false])
должно быть
@messages = @folder.messages.order("created_at DESC").where("deleted = ? or deleted IS NULL", false)
Комментарии:
1. спасибо за ответ fl00r, но он по-прежнему не сортируется по created_at DESC
2. @messages.map(amp;:created_at) -> NoMethodError (У вас есть объект nil, когда вы этого не ожидали! Возможно, вы ожидали увидеть экземпляр Array. Произошла ошибка при вычислении nil.map): app/controllers/mailbox_controller.rb:13:в
show' app/controllers/mailbox_controller.rb:5:in
индексе’
Ответ №2:
У меня была похожая проблема, и похоже, что created_at, к которому вы обращаетесь, принадлежит папке вместо сообщений.
Можете ли вы попробовать с
@msgs = @folder.messages.order("messages.created_at DESC")