2013-05-27 13 views
14

Mam formularz wyszukiwania w nagłówku mojej aplikacji i chciałbym użyć tego formularza wyszukiwania do przeszukiwania wielu modeli w aplikacji.Wyszukiwanie wielu modeli naraz za pomocą Ransack

Na przykład prośba jak /search?q=rails powinna wyzwalać przeszukiwanie przez wiele modeli jak Work, Project, User i ich zdefiniowanych atrybutów. Chciałem użyć Ransack, ponieważ używam go już w modelu Work w innym obszarze aplikacji.

Myślę, że nie do końca rozumiem Ransacka, a dokumentacja zawsze wskazuje, że należy zdefiniować @q = MyModel.search(params[:q]), aby użyć go w formularzu search_form_for @q. Czy istnieje sposób, w którym nie trzeba wcześniej definiować konkretnego modelu? I po prostu przekazać nazwę parametru, taką jak search_form_for :q?

Odpowiedz

32

OK, po zadaniu pytania odpowiedź pojawiła się w mojej głowie.

Zamiast pomocnika search_form_for Mam teraz tylko przy użyciu form_tag pomocnika w następujący sposób:

<%= form_tag search_path, method: :get do %> 
    <%= text_field_tag :q, nil %> 
<%= end %> 

oraz w akcji poszukiwawczej po prostu zrobić:

q = params[:q] 
@works = Work.search(name_cont: q).result 
@projects = Project.search(name_cont: q).result 
@users = User.search(name_cont: q).result 

Działa to dla mnie . Mam nadzieję, że to też pomoże komuś innemu.

+3

Przyjemne rozwiązanie - dzięki za udostępnienie! – scarver2

+1

Bardzo proszę. – Daniel

Powiązane problemy