在1个视图中显示2个模型的数据

时间:2010-11-24 08:20:42

标签: ruby-on-rails

我有2个型号:AvailableDates - > belongs_to:spec和Spec - > has_many:available_dates 现在我有一个视图,我想要显示来自Spec和AvailableDates的数据,并且具有相同的friend_id属性。我可以用SQL做到这一点,它可以正常工作:

@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获取数据?

2 个答案:

答案 0 :(得分:5)

您可能希望将joinsinclude参数用于ActiveRecord的find方法。请查看find的{​​{3}}和解释两者之间差异的API documentation

答案 1 :(得分:0)

完成:include后,您可以访问相关数据,如下所示:

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