假设我有一个模型Foo
,它很大并且有很多组件。对于给定的Ajax查询,我只对一个特定属性bar
感兴趣,该属性是foos表中的一列。
是否有一种简单的方法可以加载该属性,而不用费心去检索记录的其余部分?例如,如果我想知道的是ID为# _ _的Foo栏,我该如何检索?
答案 0 :(得分:14)
通过使用包含要返回的属性的字符串调用select
方法,您只能返回特定列。以你的例子:
Foo.select('bar').first #<Foo bar: 1>
请记住,这些对象将像普通的ActiveRecord对象一样工作,但对于您未选择的任何字段返回nil
,因此请注意使用此功能。
您可以在类名称本身或任何Relation上调用select,这样您就可以将通常使用的ActiveRecord调用链接在一起,如where
等。
答案 1 :(得分:7)
我更喜欢这个
User.where(:id => user_id).pluck(:user_name).first #'tom'
Foo.where(:age => 23).pluck(:user_name) #['tom', 'jerry', ...]
答案 2 :(得分:4)
Foo.where(<condition>).select('fieldname')
实施例
results = Foo.where('is_active = ?', true).select('bar')
以下列方式访问所选字段:
results.map {|res| res.bar}
返回一个bar的数组
答案 3 :(得分:2)
pluck(*column_names)
doc:http://api.rubyonrails.org/classes/ActiveRecord/Calculations.html#method-i-pluck
e.g。 Foo.pluck(:bar)