Я ищу рабочее решение для довольно простой проблемы, но не могу найти хорошее объяснение.
То, что у меня сейчас (работает), это индексное представление, которое содержит:
- форма для ввода нового элемента и
- список существующих элементов с разбивкой по страницам (используя will_paginate).
Для списка меня интересует только часть данных, поэтому я пытаюсь добавить форму с параметрами фильтра и хочу сохранить содержимое форм в файле cookie (который следует заменить на сохраняемый объект для каждого пользователя). в базе данных, но у меня еще нет пользователей). Я не могу понять, как получить значения из формы, хранящейся в куки (и наоборот), и как использовать ее вместе с will_paginated.
То, что я сейчас пытался сделать в качестве первого шага, - это создать объект @filter в моем контроллере и добавить форму фильтра для этого объекта, настроив параметры формы для повторного использования контроллера индекса. Это приводит к тому, что выбранные параметры фильтра передаются в хэше params контроллеру индекса (отображается в URL). Но у этого решения есть некоторые недостатки. во-первых, фильтры исчезают, как только я меняю представление (например, путем создания нового элемента), а во-вторых, вместо этого объект @filter должен быть файлом cookie.
Вот код, который у меня есть:
частичное представление для фильтра:
<%= form_for(@filter, :url => {:action => "index"}, :html => {:method => :get}) do |f| %>
<div class="field">
<%= f.label :german %><br />
<%= f.check_box :german %>
</div>
<div class="actions">
<%= f.submit "Filter" %>
</div>
<% end %>
Контроллер:
def index
@word = Word.new
@filter = Word.new(params[:word])
@words = Word.paginate(:page => params[:page]).order('word')
# ....
Кто-нибудь может мне помочь? Как такая функциональность (фильтрация результатов) выполняется в других приложениях?