2010-11-24 18 views
3

私は2つのモデルがあります:AvailableDates - > belongs_to:specとSpec - > has_many:available_dates 今、私はSpecとAvailableDatesの両方のデータを表示したい同じfriend_id属性。私は正常に動作SQL、でこれを行うことができます。2つのモデルのデータを1つのビューで表示する

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

ビューは両方のモデルからのデータで、次のようになります。

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

しかし、これは「のようなレールを」感じていません、

@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 

誰もがよりよい解決策を持っています:そのままビューでコードを維持しながら、私は、それをこのようにやってみたいですか?ありがとう!

更新:

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

をしかし、それは私だけ友達からのデータを提供します:私は今、働くこれを持っています。関連するavailable_dateとspecからデータを取得するにはどうすればよいですか?

答えて

5

ActiveRecordのfindメソッドには、joinsまたはincludeのパラメータを使用します。 findAPI documentationとその違いを説明しているRailscasts episodeを見てください。

+0

:含めると:条件と私は理解してだと思うあなたは、このような関連するデータにアクセスすることができます。このために私の解決策が戻ってきます。 – John

0

すれば完了した後:おかげで、私は研究

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

ありがとう、それは本当に働いた! – John

関連する問題