Rails:只加载一个属性而不是整个模型

时间:2011-05-25 03:18:10

标签: sql ruby-on-rails ruby-on-rails-3 activerecord

假设我有一个模型Foo,它很大并且有很多组件。对于给定的Ajax查询,我只对一个特定属性bar感兴趣,该属性是foos表中的一列。

是否有一种简单的方法可以加载该属性,而不用费心去检索记录的其余部分?例如,如果我想知道的是ID为# _ _的Foo栏,我该如何检索?

4 个答案:

答案 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)