假设我有一个模型Foo,它很大,有很多组件,对于一个给定的Ajax查询,我只对一个特定的属性bar感兴趣,它是foos表中的一列。是否有一种简单的方法可以只加载该属性,而不必费心检索记录的其余部分?例如,如果我只想知道ID为#__的Foo的bar,我如何检索它?
Foo
bar
q7solyqu1#
通过调用select方法并使用包含要返回的属性的字符串,可以只返回特定的列。例如:
select
Foo.select('bar').first #<Foo bar: 1>
请记住,这些对象的行为与普通ActiveRecord对象类似,但对于您未选择的任何字段返回nil,因此使用此功能时要小心。您可以在类名本身或任何关系上调用select,这样您就可以将通常使用的ActiveRecord调用(如where等)链接在一起。
nil
where
piv4azn72#
我更喜欢这个
User.where(:id => user_id).pluck(:user_name).first #'tom' Foo.where(:age => 23).pluck(:user_name) #['tom', 'jerry', ...]
oknwwptz3#
Foo.where(<condition>).select('fieldname')范例results = Foo.where('is_active = ?', true).select('bar')以下列身份访问所选字段:results.map {|res| res.bar}返回条形图的数组
Foo.where(<condition>).select('fieldname')
results = Foo.where('is_active = ?', true).select('bar')
results.map {|res| res.bar}
sxpgvts34#
pluck(*column_names)文档:http://api.rubyonrails.org/classes/ActiveRecord/Calculations.html#method-i-pluck例如Foo.pluck(:bar)
pluck(*column_names)
Foo.pluck(:bar)
mw3dktmi5#
pick(*column_names)只选择最上面一行的列,docs与pluck类似,但只读取一行
pick(*column_names)
pluck
5条答案
按热度按时间q7solyqu1#
通过调用
select
方法并使用包含要返回的属性的字符串,可以只返回特定的列。例如:请记住,这些对象的行为与普通ActiveRecord对象类似,但对于您未选择的任何字段返回
nil
,因此使用此功能时要小心。您可以在类名本身或任何关系上调用select,这样您就可以将通常使用的ActiveRecord调用(如
where
等)链接在一起。piv4azn72#
我更喜欢这个
oknwwptz3#
Foo.where(<condition>).select('fieldname')
范例
results = Foo.where('is_active = ?', true).select('bar')
以下列身份访问所选字段:
results.map {|res| res.bar}
返回条形图的数组sxpgvts34#
pluck(*column_names)
文档:http://api.rubyonrails.org/classes/ActiveRecord/Calculations.html#method-i-pluck
例如
Foo.pluck(:bar)
mw3dktmi5#
pick(*column_names)
只选择最上面一行的列,docs与
pluck
类似,但只读取一行