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

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

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

通过使用包含要返回的属性的字符串调用select方法,只能返回特定列。 对于你的例子:

 Foo.select('bar').first # 

请记住,这些对象将像普通的ActiveRecord对象一样工作,但对于您未选择的任何字段返回nil ,因此请注意使用此function。

您可以在类名称本身或任何Relation上调用select,这样您就可以将通常使用的ActiveRecord调用链接在一起,例如where等。

我更喜欢这个

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

Foo.where().select('fieldname')

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

访问所选字段:

results.map {|res| res.bar} results.map {|res| res.bar}返回一个bar的数组

pluck(*column_names)

doc: http : //api.rubyonrails.org/classes/ActiveRecord/Calculations.html#method-i-pluck

例如Foo.pluck(:bar)