ruby-on-rails Rails:只加载一个属性,而不是整个模型

wydwbb8l  于 2022-12-01  发布在  Ruby
关注(0)|答案(5)|浏览(228)

假设我有一个模型Foo,它很大,有很多组件,对于一个给定的Ajax查询,我只对一个特定的属性bar感兴趣,它是foos表中的一列。
是否有一种简单的方法可以只加载该属性,而不必费心检索记录的其余部分?例如,如果我只想知道ID为#__的Foo的bar,我如何检索它?

q7solyqu

q7solyqu1#

通过调用select方法并使用包含要返回的属性的字符串,可以只返回特定的列。例如:

Foo.select('bar').first    #<Foo bar: 1>

请记住,这些对象的行为与普通ActiveRecord对象类似,但对于您未选择的任何字段返回nil,因此使用此功能时要小心。
您可以在类名本身或任何关系上调用select,这样您就可以将通常使用的ActiveRecord调用(如where等)链接在一起。

piv4azn7

piv4azn72#

我更喜欢这个

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

oknwwptz3#

Foo.where(<condition>).select('fieldname')
范例
results = Foo.where('is_active = ?', true).select('bar')
以下列身份访问所选字段:
results.map {|res| res.bar}返回条形图的数组

sxpgvts3

sxpgvts34#

pluck(*column_names)
文档:http://api.rubyonrails.org/classes/ActiveRecord/Calculations.html#method-i-pluck
例如Foo.pluck(:bar)

mw3dktmi

mw3dktmi5#

pick(*column_names)只选择最上面一行的列,docs
pluck类似,但只读取一行

相关问题