2010-01-11 23 views
9

Ich habe ein Problem. Ich habe eine Show-Ansicht, die als Dashboard fungiert und Datensätze von anderen Modellen und dann zugeordneten Modellen einfügt. Ich habe ein einfaches Suchformular, das gut funktioniert, um ein Modell zu durchsuchen, aber ich weiß nicht, wie es durch die zugehörigen Modelle aussehen soll. Ich glaube nicht, dass eine Volltextsuche notwendig ist, und ich bin mir nicht sicher, wie es funktionieren würde, weil ich nicht möchte, dass etwas über die gesamte Website hinweg gesucht wird.Rails Suche über mehrere Modelle

Dank

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

companies_controller

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

Die folgende Antwort denke ich ist die beste, aber nur für den Fall jemand interessiert ist, das ist chaotisch aber funktioniert auch: finden (: alle,: joins =>: Vorwahlen,: Bedingungen => ['soldiers.email WIE? OR primaries.email LIKE? ODER soldaten.vorname LIKE? OR primaries.vorname LIKE? ODER soldaten.name like? Or primaries.lastname LIKE? ', "% # {[Search]}}%", "% # {[search] }% ","% # {[Suche]}% ","% # {[Suche]}% ","% # {[Suche]}% ","% # {[Suche]}% "],: order => 'soldiers.lastname') – looloobs

Antwort

4

Wie über eine Suchmaschine hinter der App wie Thinking Sphinx? Überlassen Sie die harte Arbeit des Caching und der Suche einer anderen Person und lassen Sie Ihre Rails-App das Ergebnis liefern.

+0

Ah habe ich missverstanden und dachte Thinking Sphinx hat nur Anwendung weit durchsucht. Danke, dass du mich darauf hingewiesen hast. – looloobs