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(
例
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)