我有一個簡單的查找語句,例如:鐵軌/ ActiveRecord的搜索渴望加載協會
m = MyModel.find(1, :include => :my_children)
隨着m.mychildren作爲一個數組;無論如何都可以從數組中找到一條特定的記錄,而無需遍歷整個事物。如果我mychildren.find(1),一個新的數據庫查詢是問題,這是沒有道理的,因爲它們全部已加載
我有一個簡單的查找語句,例如:鐵軌/ ActiveRecord的搜索渴望加載協會
m = MyModel.find(1, :include => :my_children)
隨着m.mychildren作爲一個數組;無論如何都可以從數組中找到一條特定的記錄,而無需遍歷整個事物。如果我mychildren.find(1),一個新的數據庫查詢是問題,這是沒有道理的,因爲它們全部已加載
我不太清楚你問什麼,但你有沒有試過select:
m.mychildren.select{ |child| child == <<some_statement>> }
這不會碰到數據庫假設你已經使用了:include
的選擇,因爲你在你的問題說明。
另外,如果你知道你想要孩子的數量,你應該能夠只使用
m.mychildren[1]
它看起來像有一個小的Rails魔術會在這裏。 Enumerable#find被ActiveRecord::Base#find覆蓋爲關聯創建的方法。
上方Enumerable#find的別名爲Enumerable#detect。 不幸的是Enumerable#find/Enumerable#detect與ActiveRecord :: Base#find有很大不同。
所以你不能只是做mychildren.find(1)
,而如果你想避免再次擊中數據庫,你必須做mychildren.detect{|c| c.id == 1}
。你也可以考慮擴展Array來做更乾的方法。
class Array
def id_find id
self.detect{|element| element.id == id}
end
end
我知道孩子的ID,而不是數組中的索引。我知道默認的ruby數組函數。我只是想知道是否有一些鐵軌monkeypatch增加了一些支持查找孩子。 – gmoniey 2009-12-22 00:06:46