2013-03-14 7 views
7

Ich bin neu bei Ruby on Rails, und ich erstelle meine erste Website. Ich habe ein Benutzermodell mit 3 Spalten: firstname, lastname und email. Ich verwende ransack, um eine Suchmaschine zu erstellen, und ich möchte ein Suchfeld haben, das jede Spalte durchläuft und das Ergebnis anzeigt.Ransack, Suche mehrere Spalten, ein Feld, Schienen 3

ich user_controller.rb gemacht haben wie folgt aussehen:

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

Und mein User \ index.html.erb sieht wie folgt aus:

<%= 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 %> 

Geben Sie mir 3 Suche Felder, aber ich möchte nur eine, die Vorname, Nachname und E-Mail durchläuft.

Bearbeiten 1: Nach dem Testen von mehr, fand ich heraus, dass das Suchfeld nicht sowohl Vorname und Nachname, oder alle Leerzeichen verarbeiten kann. Ich habe gelesen, dass es möglich ist, eine helper_method wie folgt zu machen: Searching multiple fields with Ransack

Und wenn ich das Suchergebnis bekomme, werde ich in meinen Modellindex etc: user/index geworfen. Wo kann ich das ändern?

Aber es gibt nichts, wie man es in der Ansicht verwendet. Warum ist es so schwer, das zu tun? Das ist es, was du tust: in Controller mach das -> im Modell mache das -> in Sicht tu das -> Und vergiss nicht, die Routen so zu reparieren ->

Antwort

16

First of alles, bevor Sie versuchen, ein wenig durch die Edelstein-Dokumente zu suchen und googeln ein wenig^_ ^.

Die erste bezieht die Github Seite: https://github.com/ernie/ransack

am Demo-Seite Sie suchen von Ransack hier: http://ransack-demo.herokuapp.com/ Sie das erste Feld sehen sollte das tut, was Sie (in Nachname und firsname in beide suchen) wollen und auf den Quellcode der Seite einen Blick haben, sollten Sie diese Zeile sehen

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

die Ihnen eine Vorstellung auf dem richtige Prädikat zu verwenden gibt, können Sie auch eine Liste von ihnen haben sich hier: https://github.com/ernie/ransack/blob/master/lib/ransack/constants.rb (immer im Gemdoc auf GitHub).

Basierend auf, dass Sie so etwas in Ihrer Ansicht

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

, die eine ‚ODER-Bedingung‘ Abfrage generiert tun können, wie Sie wieder in der Demo-Seite sehen (wo die Abfrage generiert wird als ein dispayed traditionelle SQL-Abfrage)

this helps

Prost

+1

Nizza, die wie ein Charme! Ich hatte mich blind gemacht, aber ich sehe jetzt, dass die Antwort direkt vor mir war. Danke! –

+1

Ich bin froh, wenn ich helfen kann^_^ – phron

+0

Kann ich Sie um Hilfe bitten? Ich habe bemerkt, dass Whitespace oder die Suche mit mehr als 1 Wort diese Methode zum Scheitern bringt. Wenn der Vorname Foo ist und der Nachname Bar und ich die Foo-Leiste suche, wird es scheitern. Ist es möglich, ein: def set_full_name .... end zu erstellen und es dann in der Ansicht aufzurufen?und wie nennst du es in der Ansicht? mit helper_method? ich schaffe es, dies zu tun .. Und eine letzte Sache, wenn ich irgendwo anders suchen, werden meine Ergebnisse mich immer zum Modell - Index werfen. Warum ist das? –

Verwandte Themen