Проблема сортировки результатов запроса Ruby On Rails 3

#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")