2013-03-14 11 views
7

Jestem nowy w Ruby on Rails i tworzę swoją pierwszą stronę. Mam model użytkownika z 3 kolumnami: firstname, lastname i email. Korzystam z przeszukiwania, aby utworzyć wyszukiwarkę i chcę mieć jedno pole wyszukiwania, które przejdzie przez każdą kolumnę i wyświetli wynik.Ransack, przeszukaj wiele kolumn, jedno pole, tory 3

Zrobiłem user_controller.rb wygląda tak:

@q = User.search(params[:q]) 
@users = @q.result(:distinct => true) 

i mój user \ index.html.erb wygląda następująco:

<%= search_form_for @search do |f| %> 
    <div class="field"> 
    <%= f.label :firstname_cont , "Firstname" %> 
    <%= f.text_field :firstname_cont %> 
    <%= f.label :lastname_cont , "Lastname" %> 
    <%= f.text_field :lastname_cont %> 
    <%= f.label :email_cont , "Email" %> 
    <%= f.text_field :email_cont %> 
    </div> 
    <div class="actions"><%= f.submit "Search" %></div> 
<% end %> 

daje mi 3 Szukaj pola, ale chcę tylko taki, który przechodzi przez imię, nazwisko i e-mail.

Edycja 1: Po przetestowaniu kilku innych elementów okazało się, że pole wyszukiwania nie może obsługiwać zarówno imienia, jak i nazwiska, ani żadnych białych znaków. Przeczytałem, że możliwe jest wykonanie metody helper_method w następujący sposób: Searching multiple fields with Ransack

Po otrzymaniu wyniku wyszukiwania wrzucam do mojego indeksu modelu etc: user/index. Gdzie mogę to zmienić?

Ale nie ma nic, jak z niego korzystać w widoku. Dlaczego tak trudno jest po prostu skrzeczenie, to co robisz: w Controller to zrobić -> w modelu to zrobić -> w widoku to zrobić -> I nie zapomnij naprawić takie trasy ->

Odpowiedz

16

Pierwszy z wszystko, zanim poprosisz, spróbuj trochę przeszukać dokumenty z klejnotami i trochę google-^^.

Pierwszy z nich odnosi się to strona GitHub: https://github.com/ernie/ransack

Patrząc na stronie demo z ransack tutaj: http://ransack-demo.herokuapp.com/ powinien pojawić się pierwsze pole robi to, co chcesz (wyszukiwanie w zarówno w nazwisko i firsname) i zaglądając do kodu źródłowego strony powinieneś zobaczyć tę linię

<input id="q_first_name_or_last_name_cont" name="q[first_name_or_last_name_cont]" size="30" type="text" /> 

który daje wyobrażenie o prawidłowego orzecznika w użyciu, można również listę nich tutaj: https://github.com/ernie/ransack/blob/master/lib/ransack/constants.rb (zawsze w pliku doc ​​do github).

podstawie, że można zrobić coś takiego w widoku

<%= f.text_field :lastname_or_first_name_or_email_cont, :placeholder => 'full name or email contains' %> 

że generuje „lub stan” zapytanie, jak można zobaczyć na stronie demo ponownie (gdzie kwerendy generowana jest dispayed jako tradycyjny zapytań SQL)

Nadzieja to pomaga

Cheers

+1

Nicea, który pracował jak urok! Miałem googeld się ślepy, ale widzę teraz, że odpowiedź była tuż przede mną. Dzięki! –

+1

Cieszę się, że mogę pomóc, gdy mogę^_^ – phron

+0

Czy mogę prosić o więcej pomocy? Zauważyłem, że biała spacja lub wyszukiwanie za pomocą więcej niż jednego słowa sprawi, że ta metoda zawodzi. Na przykład, jeśli imię jest Foo, a nazwisko to Bar, a ja szukam paska Foo, to się nie powiedzie. Czy jest możliwe zbudowanie: def set_full_name .... end, a następnie wywołanie go w widoku?i jak nazwać to w widoku? z pomocą helper_method? Didenty udaje mi się to zrobić. I ostatnia rzecz, jeśli szukam w innym miejscu, moje wyniki zawsze będą mnie rzucały do ​​modelu - indeksu. Dlaczego to? –