2013-03-20 72 views
0

比方說,我有這些模型:ActiveRecord的:急切地加載,但只加載IDS

class Order < ActiveRecord::Base 
    has_many :lines 
end 

class Line < ActiveRecord::Base 
    belongs_to :order 
end 

我想加載一些訂單記錄及其#line_ids一個請求。不過,我寧願不要將所有Line記錄實例化爲ActiveRecord對象。另外,我寧願不重寫ActiveRecord提供的#line_ids方法。

這可能嗎?

回答

0

選擇一個列與選擇一行不應該有很大的性能差異,除非在Line模型中有很多屬性,這可能是重構的一個提示。

如果你只想要的ID,我可能會做這樣的事情在我的訂貨型號

def line_ids_array 
    Line.where(order_id: self.id).pluck(:id) 
end 

這應返回行的id的數組的特定順序。

+0

這將覆蓋ActiveRecord提供的'#line_ids'方法,我寧願不這樣做。 – nicholaides 2013-03-20 18:49:47

+0

在這種情況下,您可以將其命名爲其他內容。我不確定你想要什麼。結構?一個ID的數組? ActiveRecord實例的所有由id屬性的nil值? – 2013-03-20 18:51:36

+0

感謝您的幫助。 AR爲每個has_many關聯提供'#{association} _ids'。如果您急於加載關聯,則例如調用'#line_ids'將不會再次擊中數據庫。 – nicholaides 2013-03-20 20:34:58