2012-11-08 13 views
11

Nad tym łamałem sobie głowę, ale nie mogę tego zrozumieć. Czuję, że odpowiedź jest chyba oczywisteUstawienie domyślnego parametru wyszukiwania w Ransack na szynach

Co usiłuję zrobić jest następujący:

Mam kontroler indeksu, który wymienia szereg miejsc pracy, które można przeszukiwać za pomocą plądrować. Każde zadanie ma datę ukończenia, która ma datę lub jest zerowa (niedokończona). Obecnie samo wyszukiwanie działa świetnie. Chciałbym, aby strona indeksu ładowała się pokazując tylko niedokończoną pracę, ale chcę też, aby działała tak, że gdy ktoś uruchomi wyszukiwanie, zwraca wyniki zarówno dla ukończonej, jak i niedokończonej pracy.

Każda pomoc zostanie bardzo doceniona. W poniższym kodzie: actual jest nazwą pola z datą zakończenia. Rozglądałem się też po Internecie i pomyślałem, że może coś takiego jak DEFAULT_SEARCH_PARAMETER = {}, które mam w modelu Job, może działać, ale nie mogłem tego osiągnąć.

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 

Odpowiedz

18

myślę, że może po prostu zastosować swój własny filtr, gdy nie istnieją parametry wyszukiwania:

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

Dzięki! To zadziałało. Chciałbym zagłosować, ale nie mam reputacji. –

+0

Sprawdź lepszą odpowiedź firmy ricsrock, zanim ją zastosujesz. –

0

Domyślnie strona ma być ładowana z rekordami, w których wartość rzeczywista wynosi zero. A później, gdy użytkownik wyszukuje, chcesz wrócić do wcześniejszych wyszukiwań.

Spróbuj.

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  
+0

Próbowałem, ale to nie zadziałało. Dzięki za pomoc! –

27

późno do partii, ale pomyślałem, że proponujemy alternatywną podejście w przypadku kogoś innego natknąłem się na to.

Powyższa odpowiedź działa, ale jej wadą jest to, że wartość domyślna nie jest dodawana do obiektu wyszukiwania Ransacka, więc - jeśli korzystasz z formularza wyszukiwania - domyślny wybór nie jest wyświetlany w formularzu.

Poniższe podejście dodaje domyślną wartość do obiektu wyszukiwania, dlatego pojawi się w formularzu wyszukiwania.

def index 
    @search = Job.search(params[:q]) 
    @search.status_cont = 'Open' unless params[:q] #or whatever, must use Ransack's predicates here 
    @results = @search.result 
    @job = @results.paginate(:per_page => 10, :page => params[:page]) 
end 
+0

To powinna być zaakceptowana odpowiedź. – johnrees

+0

Hej @ ricsrock wszelkie pomysły, jak to zrobić z zakresu na białej liście? – bnussey

+0

Dobra odpowiedź @ricsrock. Ponieważ modyfikuje wyszukiwanie Ransack, łatwo można dodać, że domyślnie dodane opcje pojawiły się poprawnie w sekcji wyszukiwania renderowanej strony. –