Установка параметра поиска по умолчанию для Ransack for rails
Я размахивал своим мозгом, но не мог понять. Я чувствую, что ответ, вероятно, очевиден.
Я пытаюсь сделать следующее:
У меня есть указательный контроллер, который перечисляет серию заданий, которые я могу выполнить с помощью Ransack. Каждое задание имеет дату завершения, которая либо имеет в ней дату, либо имеет значение null (незавершенное). В настоящее время сам поиск отлично работает. Я хотел бы сделать так, чтобы страница индекса загружалась, показывая только незавершенную работу, но я также хочу, чтобы она работала так, что когда кто-то запускает поиск, возвращает результаты как для законченной, так и незавершенной работы.
Любая помощь будет принята с благодарностью. В приведенном ниже коде: актуальным является имя поля с датой завершения. Я также смотрел по сети и думал, что может быть что-то вроде DEFAULT_SEARCH_PARAMETER = {}, которое у меня есть в модели Job, может работать, но я, похоже, не мог ее получить.
class Job < ActiveRecord::Base
DEFAULT_SEARCH_PARAMETER ={}
attr_accessible :items_attributes, :actual
end
def index
@search = Job.search(params[:q] || Job::DEFAULT_SEARCH_PARAMETER)
@search.build_condition
@results = @search.result
@job = @results.paginate(:per_page => 10, :page => params[:page])
end
Ответы
Ответ 1
Я думаю, вы можете просто применить свой собственный фильтр, если параметры поиска не существуют:
def index
@search = Job.search(params[:q])
@results = @search.result
@results = @results.where(:your_date => nil) unless params[:q]
@job = @results.paginate(:per_page => 10, :page => params[:page])
end
Ответ 2
Поздно к вечеринке, но подумал, что я предлагаю альтернативный подход, если кто-то еще столкнется с этим.
Ответ выше работает, но его недостатком является то, что по умолчанию не добавляется объект поиска Ransack, поэтому - если вы используете форму поиска - выбор по умолчанию не отображается в форме.
Следующий подход добавляет значение по умолчанию к объекту поиска и поэтому будет отображаться в вашей форме поиска.
def index
@search = Job.search(params[:q])
@search.status_cont = 'Open' unless params[:q] #or whatever, must use Ransack predicates here
@results = @search.result
@job = @results.paginate(:per_page => 10, :page => params[:page])
end
Ответ 3
Итак, по умолчанию вы хотите, чтобы страница загружалась с записями, где фактическое значение равно нулю. И позже, когда пользователь ищет, вы хотите вернуться к тому, как раньше работал ваш поиск.
Попробуйте.
def index
@search = Job.search(params[:q] || Job::DEFAULT_SEARCH_PARAMETER)
@search.build_condition
@results = @search.result
if @results.nil?
@results=Job.find(:all, :conditions => ["actual = NULL"] )
end
@job = @results.paginate(:per_page => 10, :page => params[:page])
end