Можно ли настроить ActiveScaffold для отображения формы поиска перед отображением списка? - PullRequest
1 голос
/ 29 января 2009

Когда я прошу ActiveScaffold показать мне очень длинный список (например, список проданных продуктов), он запускает запрос к базе данных, чтобы получить первую страницу данных, и отображает ее. Если список имеет несколько отношений, выполнение этого запроса может занять некоторое время (более секунды). Большую часть времени меня не интересует этот «нефильтрованный» список: первое, что я хочу сделать, - это нажать «поиск» и отфильтровать этот список.

Можно ли как-то сказать ActiveScaffold не отображать нефильтрованный список при вызове действия списка? Я бы хотел, чтобы он просто отображал форму поиска, ждал ввода некоторых критериев и только , а затем отображал отфильтрованный список.

Ответы [ 2 ]

1 голос
/ 30 января 2009

Я нашел решение, определив метод condition_for_collection в контроллере. Это что-то вроде взлома, но это просто (3 строки) и работает:

def conditions_for_collection
  params[:action]=="update_table" ? "" : "1=2"
end

Вот как это происходит: когда вы запрашиваете список, вызывается метод контроллера list , который обрабатывается ActiveScaffold. ActiveScaffold вызывает condition_for_collection , и, поскольку действие list (не update_table ), приведенный выше метод condition_for_collection возвращает «1 = 2», что, конечно, приводит к пустой список.

Пользователь может нажать на кнопку «Поиск» и запустить поиск. Это вызывает действие update_table , снова ActiveScaffold вызывает condition_for_collection , которое на этот раз возвращает "" (без фильтра), поэтому выполняется поиск по всему списку.

Это не очень красиво, но оно делает свою работу.

0 голосов
/ 29 января 2009

Возможно, вам нужно переопределить действие #index и указать собственный шаблон. Похоже, нет никакого способа сказать, чтобы он не показывал этот список.

Примерно так:

active_scaffold :models do |config|
    config.actions.exclude :index
end

Затем вам нужно будет реализовать свой собственный метод индекса, который имеет собственный шаблон и так далее. Вернитесь к поисковому действию Active Scaffold. Я не уверен, как бы вы это сделали, но если вы посмотрите на исходный HTML-код исходной страницы, то вернетесь, должно быть достаточно ясно, на какое действие он ссылается, что выполняет поиск.

...