我正在Rails 3.0.7中工作。Rails 3拒絕急切加載
我有不急於負載一些多到很多,有一種-to-many關聯。
我的聯繫是:
Person has_many :friends
Person has_many :locations through=> :location_histories
Location belongs_to :location_hour
Location_hour has_many :locations
在我的控制器我有以下幾點:
@people = Person.includes([[:locations=>:location_hour],:friends]).where("(location_histories.current = true) AND (people.name LIKE ? OR friends.first_name LIKE ? OR friends.last_name LIKE ? OR (friends.first_name LIKE ? AND friends.last_name LIKE ?))").limit(10).all
然後在我的觀點,我有:
<% @people.each do |person| %>
<tr>
<td><%= link_to person.name, person %></td>
<td><%= link_to person.friends.collect {|s| [s.full_name]}.join(", "), person.friends.first %></td>
<td><%= link_to person.locations.current.first.name, person.locations.current.first %></td>
</tr>
<% end %>
locations.current是一個範圍定義爲:
scope :current, lambda {
where("location_histories.current = ?", true)
}
可正常工作和第2個生成數據庫調用:一個拿到個人ID的列表,然後一個大的數據庫調用,一切都是正確連接。問題是,後有n個數據庫的線沿線的來電:
SELECT 'friends'.* from 'friends' WHERE ('friends'.person_id = 12345)
所以對於在視圖中循環的每個迭代。不用說這需要一段時間。
我以爲。所有將迫使預先加載。任何人都知道這裏發生了什麼?
這花費超過3秒的ActiveRecord。太長了。
我將不勝感激任何和所有的建議。
謝謝。
我以前在<= 3.0.3和急切加載時遇到了問題。是否可以嘗試升級到3.0.7? – Dex 2011-05-11 23:45:10
謝謝Dex。將嘗試並報告。 – NAD 2011-05-12 02:48:56
已升級到3.0.7,仍然有相同的問題。 – NAD 2011-05-12 03:20:16