可以说我有一个模型,Foo
,它很大,并且有很多组件。对于给定的Ajax查询,我只对一个特定的属性bar
感兴趣,它是foos表中的一列。导轨:只加载一个属性不是一个整体模型
是否有一种简单的方法可以加载该属性,而不用打扰检索记录的其余部分?例如,如果我想知道的是Foo ID为#_ _的酒吧,我该如何检索?
可以说我有一个模型,Foo
,它很大,并且有很多组件。对于给定的Ajax查询,我只对一个特定的属性bar
感兴趣,它是foos表中的一列。导轨:只加载一个属性不是一个整体模型
是否有一种简单的方法可以加载该属性,而不用打扰检索记录的其余部分?例如,如果我想知道的是Foo ID为#_ _的酒吧,我该如何检索?
可以通过调用select
方法仅返回特定的列用包含attribut的字符串你想要返回。对于你的例子:
Foo.select('bar').first #<Foo bar: 1>
请记住,这些物体会像正常的ActiveRecord对象但对你没有选择任何现场返回nil
,因此使用这个功能照顾。
您可以拨打选择在类名本身或任何关系,所以你可以连续使用ActiveRecord的要求你平时使用像where
等
Foo.where(<condition>).select('fieldname')
例
results = Foo.where('is_active = ?', true).select('bar')
访问选定的字段为:
results.map {|res| res.bar}
返回的阵列条的
pluck(*column_names)
DOC:http://api.rubyonrails.org/classes/ActiveRecord/Calculations.html#method-i-pluck
例如Foo.pluck(:bar)
我喜欢这个
User.where(:id => user_id).pluck(:user_name).first #'tom'
Foo.where(:age => 23).pluck(:user_name) #['tom', 'jerry', ...]
非常困难的解决方案,尝试这一个 - User.where(:ID => USER_ID).pluck(:USER_NAME)。一 – 2014-01-21 23:56:42