2010-11-24 4 views
3

Ich habe 2 Modelle: AvailableDates -> gehört zu: spec und Spec -> has_many: available_dates Jetzt habe ich eine Ansicht, wo ich Daten sowohl von Spec und AvailableDates anzeigen möchte Gleiches Attribut friend_id. Ich kann mit SQL tut dies, der gut arbeitet:Zeige Daten von 2 Modellen in einer Ansicht

@invitees = AvailableDate.find_by_sql "SELECT d.friend_id, s.first_name, s.last_name, s.gender, s.birthdate, s.occupation, s.country, s.city FROM available_dates d, specs s WHERE d.friend_id = s.friend_id AND d.city = 'London' 

Die Ansicht wird wie folgt aussehen, mit Daten aus beiden Modellen:

<% @invitees.each do |invitee| %> 
     <tr> 
     <td><%=h invitee.first_name %></td> 
     <td><%=h invitee.last_name %></td> 
     <td><%=h invitee.gender %></td> 
     <td><%=h invitee.birthdate %></td> 
     </tr> 
    <% end %> 

Dies ist jedoch nicht „Schienen wie“ fühlt, also möchte ich es auf diese Weise machen, während ich den Code in der Ansicht unverändert belasse:

@invitees = AvailableDate.find(:all, :conditions => ["country = ? and city = ? and start_date <= ? and end_date >= ?", country, city, date, date]) 

    # Retrieve spec data for every matching invitee 
    @invitees.each do |invitee| 
     @spec = Spec.find(:first, :conditions => ["friend_id = ?", invitee.friend_id]) 
    end 

Hat jemand eine bessere Lösung? Vielen Dank!

Update: Ich habe das jetzt das funktioniert:

@invitees = Friend.find(:all, :include => [:available_date, :spec], :conditions => ["specs.country = ?", "United Kingdom"]) 

Aber es gibt mir nur Daten von Freund. Wie bekomme ich auch Daten aus dem zugehörigen available_date und der Spezifikation?

Antwort

5

Wahrscheinlich möchten Sie die joins oder include Parameter zu ActiveRecord find Methode verwenden. Werfen Sie einen Blick auf die API documentation für find und die Railscasts episode, die den Unterschied zwischen den beiden erklärt.

+0

danke, ich recherchiert für: include und: Zustand und glaube, ich verstehe. Ich werde mit meiner Lösung zurückkommen. – John

0

Nachdem Sie das getan haben: include Sie das dazugehörige Daten wie folgt zugreifen können:

@invitees.each do |invite| 
    invite.available_date.city 
    invite.spec.first_name 
end 
+0

Danke, das hat in der Tat funktioniert! – John

Verwandte Themen