Rails: загрузка только одного атрибута, а не всей модели - PullRequest
9 голосов
/ 25 мая 2011

Допустим, у меня есть модель Foo, которая большая и имеет много компонентов.Для данного Ajax-запроса меня интересует только один конкретный атрибут, bar, который является столбцом в таблице foos.

Есть ли простой способ загрузить только этот атрибут, не беспокоясь овосстановить остальную часть записи?Например, если все, что я хочу знать, это строка для Foo с идентификатором # _ _, как я могу получить это?

Ответы [ 4 ]

14 голосов
/ 25 мая 2011

Вы можете вернуть только определенные столбцы, вызвав метод select со строкой, содержащей атрибуты, которые вы хотите вернуть.Например:

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

Имейте в виду, что эти объекты будут действовать как обычные объекты ActiveRecord, но возвращайте nil для любого поля, которое вы не выбрали, поэтому будьте осторожны, используя эту функцию.* Вы можете вызывать select для самого имени класса или любого отношения, так что вы можете связать вместе вызовы ActiveRecord, которые вы обычно используете, например where и т. Д.

7 голосов
/ 22 января 2014

Я предпочитаю это

User.where(:id => user_id).pluck(:user_name).first #'tom'
Foo.where(:age => 23).pluck(:user_name) #['tom', 'jerry', ...]
4 голосов
/ 25 мая 2011

Foo.where(<condition>).select('fieldname')

Пример

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

Доступ к выбранным полям:

results.map {|res| res.bar} возвращает массив баров

2 голосов
/ 17 января 2014

pluck(*column_names)

документ: http://api.rubyonrails.org/classes/ActiveRecord/Calculations.html#method-i-pluck

например Foo.pluck(:bar)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...