2015-01-12 9 views
0

Я использую драгоценный камень для рисования kaminari. Я могу ограничить результаты поиска на страницу до 6. Это пример моей пагинации в моем products_controller:Выбор количества результатов на странице с помощью выпадающего меню

def index 
    @products = Product.order(:title).page(params[:page]).per(6) 
end 

Но вместо того жесткого кодирования «6» в коде постраничной, я хочу, чтобы пользователь, чтобы иметь возможность измените это через вид пользовательского интерфейса. Я хочу выпадающее меню в представлении, чтобы пользователь мог выбрать «3», «6» или «9». Как я могу это сделать? Я предполагаю, что это может включать переменную экземпляра для хранения выбора пользователя, но я не уверен, может ли кто-нибудь помочь? У меня есть это выпадающее меню в моем application.html.erb:

<div id="per-page"> 
    <select> 
    <option value="3">3</option> 
    <option value="6">6</option> 
    <option value="9">9</option> 
    </select> 
</div> 

ответ

0

Добавить в корзину Или name (например, «за») для вашего выбора поля, например:

<select name="per"> ... </select> 

Вы также можете посмотреть в используя select_tag, что поможет вам убедиться, что выбранная опция выбрана на основе выбора пользователя.

, а затем изменить:

Product.order(:title).page(params[:page]).per(params.fetch(:per, '6').to_i) 

который получит выбор пользователя (или «6», если не выбран ни один), и принуждать его к целому (я не уверен, если это насилие необходимо для Kaminari).

Да, вам, вероятно, понадобится кнопка «Перейти». Вы должны быть в состоянии только обертка ваше поле выбора, как:

<form> 
    <div id="per-page"> ... </div> 
    <button>Go!<button> 
</form> 

, который должен работать, потому что действие по умолчанию в форме текущей страницы.

Предполагая, что вы используете JQuery, и что ваше поле выбора имеет идентификатор per, можно также опустить кнопку (если вы все еще нуждаются в form), и в JavaScript сделать:

$('#per').on('change', function() { 
    $(this).closest('form').submit(); 
}); 

Некоторые отладочные предложения

Поместите <%= debug params %> где-то в нижней части application.html.erb (но внутри body).

Попробуйте вручную добавить параметр per к вашему URL-адресу, например, localhost:3000/search?per=3.

+0

Извините, что я действительно совсем новый для рубинов, когда вы говорите, добавьте имя в поле выбора, как мне это сделать? Также мне нужна кнопка «Перейти», чтобы перезагрузить страницу, чтобы убедиться, что загружена сумма за каждую страницу? –

+0

@ benjs.1, я добавил некоторые детали к моему ответу. –

+0

Спасибо, я действительно не хочу использовать JavaScript, но есть ли способ сделать это без него? Может быть, используя метод get? –

Смежные вопросы