#ruby-on-rails
#ruby-on-rails
Вопрос:
Я использую will_paginate для вложенных заметок в представлении contact show. Контроллер контактов выглядит следующим образом:
@contact = Contact.find(params[:id], :include => :notes)
@notes = @contact.notes.paginate(:page => params[:page], :per_page => 5, :order => "created_at ASC")
Отображение контактов имеет <%= will_paginate @notes %>
тег. Это работает, но порядок сортировки неверен, он показывает все 6 заметок вместо 5, а нумерация страниц вверху перевернута, это «следующий, 2, 1, предыдущий» вместо «предыдущий, 1,2, следующий»???
Ответ №1:
Вы пробовали перемещать порядок в область видимости?
У вас может быть область в вашей модели, например
scope :order_by, lambda { |o| { :order => o } }
А затем напишите свою строку разбиения на страницы как
@notes = @contact.notes.order_by("created_at ASC").paginate(:page => params[:page], :per_page => 5)
Комментарии:
1. Почему вы обертываете
order
область вместо того, чтобы вызывать ее напрямую (@contect.notes.order("created_at ASC").paginate(....)
)?2. Хорошая точка зрения, Дэн. Это остаток от моих Rails 2.3 дней. Вы совершенно правы. Я думаю, это зависит от того, какую версию Rails использует Джон.
Ответ №2:
Моей первой мыслью было, что :include => :notes
это может сбить с толку will_paginate. Вы пытались оставить это?
Комментарии:
1. К сожалению, это не имеет никакого значения.
Ответ №3:
Вы можете сделать это:
@notes = @contact.notes.paginate(:page => params[:page], :per_page => 5, :order => "notes.created_at ASC")
class Contact < ActiveRecord::Base
has_many :notes,:order => "...." #remove this order option if you did
end
class Note < ActiveRecord::Base
default_scope :order => "..." # remove this order option if you did
end
Ответ №4:
Вы указали :order => "created_at ASC"
метод paginate вместо активного объекта, который вы хотите каким-то образом отсортировать. Я не смог найти точную точку в will_paginate
драгоценном камне, но держу пари, что вспомогательный метод просмотра will_paginate
проверяет порядок, чтобы увидеть, идет ли он слева направо или справа налево.
Модифицированная версия ответа Симмо, включающая предложение Дэна Сиверса, должна быть правильной:
@notes = @contact.notes.order("created_at ASC").paginate(:page => params[:page], :per_page => 5)
Ответ №5:
Как глупо!! Наконец-то обнаружена проблема, элементы имели значение «float: right», что привело к обратному порядку….