2011-05-25 52 views
9

可以說我有一個模型,Foo,它很大,並且有很多組件。對於給定的Ajax查詢,我只對一個特定的屬性bar感興趣,它是foos表中的一列。導軌:只加載一個屬性不是一個整體模型

是否有一種簡單的方法可以加載該屬性,而不用打擾檢索記錄的其餘部分?例如,如果我想知道的是Foo ID爲#_ _的酒吧,我該如何檢索?

回答

14

可以通過調用select方法僅返回特定的列用包含attribut的字符串你想要返回。對於你的例子:

Foo.select('bar').first #<Foo bar: 1> 

請記住,這些物體會像正常的ActiveRecord對象但對你沒有選擇任何現場返回nil,因此使用這個功能照顧。

您可以撥打選擇在類名本身或任何關係,所以你可以連續使用ActiveRecord的要求你平時使用像where

4

Foo.where(<condition>).select('fieldname')

results = Foo.where('is_active = ?', true).select('bar')

訪問選定的字段爲:

results.map {|res| res.bar}返回的陣列條的

+0

非常困難的解決方案,嘗試這一個 - User.where(:ID => USER_ID).pluck(:USER_NAME)。一 – 2014-01-21 23:56:42

7

我喜歡這個

User.where(:id => user_id).pluck(:user_name).first #'tom' 
Foo.where(:age => 23).pluck(:user_name) #['tom', 'jerry', ...] 
相關問題