Установка параметра поиска по умолчанию для 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