2011-05-25 19 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', ...] 
相关问题