Создание формы рельсов для фильтрации страницы индекса? - PullRequest
6 голосов
/ 24 апреля 2010

Добрый день, ребята, у меня проблема с фильтрацией представления нескольких тысяч предметов, которые есть в моей системе. В соответствии со спецификациями системы, которую мы создаем, у нас должна быть форма, которая позволяет людям указывать дату начала, а затем интервал в минутах, чтобы фильтровать представление элементов. Я построил свои вспомогательные функции для возврата всех сделок за этот интервал времени, но я не могу на всю жизнь правильно построить форму, которая будет возвращать значение dateTime и целочисленное значение в верхней части страницы индекса?

Есть идеи? Должен ли я создать отдельный объект модели для присвоения значений или есть более простой способ?

Ответы [ 2 ]

17 голосов
/ 24 апреля 2010

На вашей странице индекса вы можете создать форму фильтра, подобную этой

<%= form_tag '', :method => :get do %>
  <%= text_field_tag :value_one %>
  <%= text_field_tag :value_two %>
  <%= submit_tag 'Filter' %>
<% end %>

Затем ваша форма выполнит GET на вашей странице с параметрами строки запроса, а затем в вашем контроллере вы сможете найти параметры фильтра, которые могли быть переданы.

2 голосов
/ 05 августа 2012

Мне нравится постепенно создавать фильтр в моем контроллере, то есть:

def index

  filter = []

  if params.has_key?("filter")

    if !params[:filter][:user_id].blank?
      id = params[:filter][:user_id]
      filter << ["user_id = #{id.to_i}"]
    end

    if !params[:filter][:project_id].blank?
      id = params[:filter][:project_id]
      filter << ["project_id = #{id.to_i}"]
    end

    if !params[:filter][:change_type_id].blank?
      id = params[:filter][:change_type_id]
      filter << ["change_type_id = #{id.to_i}"]
    end

  end

  @logs = LogEntry.where(filter.join(" AND ")).order('created_at DESC')    

end

Если в вашем представлении не выбран фильтр (я использую помощник по форме select_tag), ваш запрос к БД вернет все записи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...