2017-06-12 52 views
1

所以我所擁有的是一個模型Referent具有多個屬性,例如nomprenom。 我能夠使用一個搜索值在我的模型中搜索每個屬性。但後來我試着有一個text_field爲每個屬性,所以nom我會有一個text_fieldprenom我會有另一個。搜索多個字段具有多個值

所以它會搜索所有Referent誰有nomprenom但我不能分開這兩個搜索。現在,它只是採取的價值之一,並在這兩個nomprenom具有相同值

查看搜索:

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

控制器:

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 

型號:

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

現在它似乎只取第二個0123的值並將其用於搜索。我正在使用postgresql。

完整視圖:使用拉蒙答案enter image description here

+0

你的實現是使用兩個文本框,而且每一個正在尋找一個不同的數據庫列。 *那麼爲什麼不發送兩個不同的HTTP參數*? –

+0

隨着你現在的實現,你總會遇到'prenom'字段正在用'nom'值進行搜索的問題,反之亦然。 –

+0

這個問題不是很清楚。你有沒有添加兩個搜索字段?一個用於nom,另一個用於prenom?搜索應該是AND還是OR?正如「nom Like%nom_search%OR prenom LIKE%prenom%?或者」nom Like%nom_search%AND prenom LIKE%prenom%?? – Surya

回答

3

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

錯誤我會做這樣的

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

控制器

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 

模型

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

to_s需要防止零

+0

我得到'未定義的局部變量或方法search_nom' – CNuts

+0

很奇怪,如果你使用像我這樣的代碼,它不會給出這個錯誤,是完整的錯誤? –

+0

我在這裏做了一個重構,試試看它是 –