2017-06-12 3 views
1

Also, was ich habe, ist ein Modell Referent, die mehrere Attribute zum Beispiel nom und prenom hat. Ich konnte jedes Attribut in meinem Modell mit einem Suchwert suchen. Aber dann habe ich versucht, eine text_field für jedes Attribut zu haben, also würde ich für nom einen text_field haben und für prenom würde ich einen anderen haben.Suche mehrere Felder mit mehreren Werten

So würde es für alle Referent wer die nom und die prenom haben, aber ich bin nicht in der Lage, diese beiden suchen zu trennen. Im Moment nehmen sie nur einen des Wertes und die Suche in beide nom und prenom mit dem gleichen Wert

Ausblick:

<h2>Search Referent</h2> 
<%= form_tag(referents_path, :method => "get", id: "search-form") do %> 
<%= text_field_tag :search, params[:search], placeholder: "Nom" %> 
<%= text_field_tag :search, params[:search], placeholder: "Prenom" %> 
<%= submit_tag "Search", class: 'btn btn-info' %> 
<% end %> 

Controller:

def index 
    @referents = Referent.all 
    if params[:search] 
    @referents = Referent.search(params[:search]).order("created_at DESC") 
    else 
    @referents = Referent.all.order("created_at DESC") 
    end 
end 

Modell:

def self.search(search) 
    where("nom || prenom ILIKE ?", "%#{search}%") 
end 

Gerade jetzt scheint es nur den Wert der zweitenzu nehmenund verwenden Sie das für die Suche. Ich benutze postgresql.

Die Vollansicht:

<div class="container"> 
<h2>Search Referent</h2> 
<%= form_tag(referents_path, :method => "get", id: "search-form") do %> 
<%= text_field_tag :search_nom, params[:search], placeholder: "Nom" %> 
<%= text_field_tag :search_prenom, params[:search], placeholder: "Prenom" %> 
<%= submit_tag "Search", class: 'btn btn-info' %> 
<% end %> 

<h2>List de Referent</h2> 

<table class="table table-hover"> 
    <tr> 
    <th>Nom</th> 
    <th>Prenom</th> 
    <th>Titre</th> 
    <th>Departement</th> 
    <th>Cellulaire</th> 
    <th>Bureau</th> 
    <th>Fax</th> 
    <th>Courriel</th> 
    <th>Organisme Referent</th> 
    </tr> 
    <% @referents.each do |referent| %> 
    <tr> 
    <td><%= referent.nom %></td> 
    <td><%= referent.prenom %></td> 
    <td><%= referent.titre %></td> 
    <td><%= referent.departement %></td> 
    <td><%= referent.cellulaire %></td> 
    <td><%= referent.bureau %></td> 
    <td><%= referent.fax %></td> 
    <td><%= referent.courriel %></td> 
    <td><%= link_to referent.organismereferent.nom_organisation, organismereferent_path(referent.organismereferent_id) %></td> 
    </tr> 
    <% end %> 
</table> 

</div> 

Fehler mit Ramon Antwort enter image description here

+0

Ihre Implementierung ist mit zwei Textfelder zu verhindern, und die jeweils eine andere Datenbankspalte sucht. * Warum also nicht zwei verschiedene HTTP-Parameter senden *? –

+0

Mit Ihrer aktuellen Implementierung haben Sie immer das Problem, dass das Feld 'prenom' mit dem' nom' Wert durchsucht wird und umgekehrt. –

+0

Die Frage ist nicht ganz klar. Hast du zwei Suchfelder hinzugefügt? Eine für nom und eine andere für prenom? Sollte die Suche ein AND oder ein OR sein? Wie in "nom Like% nom_search% ODER prenom LIKE% prenom%? Oder" nom Like% nom_search% UND prenom LIKE% prenom% ?? – Surya

Antwort

3

ich es wie dieses

<h2>Search Referent</h2> 
<%= form_tag(referents_path, :method => "get", id: "search-form") do %> 
<%= text_field_tag :search_nom, params[:search_nom], placeholder: "Nom" %> 
<%= text_field_tag :search_prenom, params[:search_prenom], placeholder: "Prenom" %> 
<%= submit_tag "Search", class: 'btn btn-info' %> 
<% end %> 

-Controller tun würde

def index 
    @referents = Referent.all 

    search_nom = params[:search_nom] 
    search_prenom = params[:search_prenom] 

    @referents = Referent.search(search_nom, search_prenom).order("created_at DESC") 
end 

Modell

def self.search(search_nom, search_prenom) 
    where("nom ILIKE ? or prenom ILIKE ?", "%#{search_nom.to_s}%", "%#{search_prenom.to_s}%") 
end 

to_s benötigt nil

+0

Ich bekomme 'undefinierte lokale Variable oder Methode search_nom' – CNuts

+0

komisch, wenn Sie den Code verwenden, wie ich hier tat, würde es diesen Fehler nicht geben, ist das der volle Fehler? –

+0

Ich habe einen Refactor hier, versuchen Sie es wie es ist –

Verwandte Themen