Можно ли настроить ActiveScaffold так, чтобы форма поиска отображалась перед отображением списка?

StackOverflow https://stackoverflow.com/questions/489798

Вопрос

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

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

Это было полезно?

Решение

Я нашел решение, определив условия_для_коллекции метод в контроллере.Это своего рода взлом, но он прост (3 строки) и работает:

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

Вот как это происходит:когда вы запрашиваете список, контроллер Список вызывается метод, обрабатываемый ActiveScaffold.Вызовы ActiveScaffold условия_для_коллекции, и поскольку действие является Список (не обновляемая таблица), приведенный выше метод conditions_for_collection возвращает "1=2", что, конечно, приводит к пустому списку.

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

Это не совсем красиво, но это делает свое дело.

Другие советы

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

Что- то вроде этого:

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top