2010-01-11 5 views
9

J'ai un problème. J'ai une vue de spectacle qui agit comme un tableau de bord et apporte des enregistrements d'autres modèles, puis des modèles associés à cela. J'ai un formulaire de recherche simple qui fonctionne bien pour rechercher un modèle, mais je ne sais pas comment le faire passer par les modèles associés. Je ne pense pas qu'une recherche en texte intégral soit nécessaire et je ne sais pas comment cela fonctionnerait parce que je ne veux pas quelque chose qui va chercher sur l'ensemble du site.Recherche de rails sur plusieurs modèles

Merci

entreprises/show/1

<div id="form"> 
    <div class="search"> 
    <% form_tag battalion_company_path, :method => :get do %> 
    <p> 
    <%= text_field_tag :search, params[:search] %> 

    <%= submit_tag "Search", :name => nil %> 

    </p> 
<% end %> 
</div> 
</div> 

<div id="bc_box"> 
<% @soldiers.each do |soldier| %> 
<div id="bc_focus"> 
    <div class="right"> 
    <%= link_to image_tag("../images/buttons/info.png", :border=>0), battalion_company_soldier_path(@battalion, @company,soldier) %> 
    <%= link_to image_tag("../images/buttons/edit.png", :border=>0), edit_battalion_company_soldier_path(@battalion, @company,soldier) %> 
    </div> 
    <%=h soldier.rank %> <%=h soldier.lastname %><br /> 
    Cell: <%=h soldier.cellphone %><br /> 
    <% soldier.primaries.each do |primary| %> 
    <p> 
    <%=h primary.firstname %> <%=h primary.lastname %> (<%=h primary.relationship %>)<br /> 

    (c):<%=h primary.cellphone %><br /> 
    <%=h primary.email %><br /> 
    </p> 
    <% end %> 

</div> 
    <% end %> 
</div> 

soldier.rb

def self.search(search) 
    if search 
    find(:all, :conditions => ['email LIKE ? OR lastname LIKE ? OR firstname LIKE ?', "%#{search}%", "%#{search}%", "%#{search}%"]) 
    else 
    find(:all, :order => 'lastname') 
    end 
end 

entreprises_controller

@soldiers = @company.soldiers.search(params[:search]) 
@primary = @company.primaries.find(:all,:conditions => ["relationship = 'Spouse'"]) 
+2

La réponse ci-dessous je pense est le meilleur mais juste au cas où quelqu'un est intéressé, c'est désordre mais fonctionne aussi: find (: all,: joins =>: primaires,: conditions => ['soldiers.email LIKE? OU primaries.email LIKE? OU les soldats.firstname LIKE? OR primaries.firstname LIKE? OU soldiers.lastname LIKE? OR primaries.lastname LIKE? ', "% # {[Recherche]}%", "% # {[recherche] }% ","% # {[recherche]}% ","% # {[recherche]}% ","% # {[recherche]}% ","% # {[recherche]}% "],: order => 'soldiers.lastname') – looloobs

Répondre

4

Que diriez-vous d'un moteur de recherche derrière votre application tels que Thinking Sphinx? Laissez le travail de mise en cache et de recherche à quelqu'un d'autre et laissez votre application Rails servir le résultat.

+0

Ah j'ai mal compris et j'ai pensé que penser au Sphinx ne cherchait qu'une application large. Merci de m'avoir indiqué cela. – looloobs

Questions connexes