ActiveRecord находит и возвращает только выбранные столбцы

изменить 2

Если вы споткнулись об этом, проверьте оба ответа, как я теперь использую для этого


У меня есть довольно большой пользовательский набор данных, который я хотел бы вернуть, чтобы быть эхо-версией как json. Одна часть:

l=Location.find(row.id)
tmp[row.id]=l

но я хотел бы сделать что-то вроде:

l=Location.find(row.id).select("name, website, city")
tmp[row.id]=l

но это, похоже, не работает. Как я могу заставить это работать?

ТНХ

изменить 1
альтернативно, есть способ, которым я могу передать массив только тех атрибутов, которые я хочу включить?

Ответ 1

В Rails 2

l = Location.find(:id => id, :select => "name, website, city", :limit => 1)

... или...

l = Location.find_by_sql(:conditions => ["SELECT name, website, city FROM locations WHERE id = ? LIMIT 1", id])

Этот справочный документ предоставляет вам полный список опций, которые вы можете использовать с .find, включая ограничение по числу, идентификатору или любому другому произвольному столбцу/ограничение.

В Rails 3 с интерфейсом запросов ActiveRecord

l = Location.where(["id = ?", id]).select("name, website, city").first

Ссылка: Интерфейс запросов активной записи

Вы также можете поменять порядок этих цепочечных вызовов, делая .select(...).where(...).first - все эти вызовы делают, это построить SQL-запрос, а затем отправить его.

Ответ 2

общипывает (имя_столбец)

Этот метод предназначен для выполнения выбора одним столбцом в виде прямого запроса SQL Возвращает массив со значениями указанного имени столбца. Значения имеют тот же тип данных, что и столбец.

Примеры:

Person.pluck(:id) # SELECT people.id FROM people
Person.uniq.pluck(:role) # SELECT DISTINCT role FROM people
Person.where(:confirmed => true).limit(5).pluck(:id)

см. http://api.rubyonrails.org/classes/ActiveRecord/Calculations.html#method-i-pluck

Свои введенные направляющие 3.2 и далее принимают только одну колонку. В рельсах 4 он принимает несколько столбцов

Ответ 3

Мой ответ приходит довольно поздно, потому что я довольно новый разработчик. Я думаю, что мой друг выглядел так:

Location.select(:name, :website, :city).find(row.id)

Btw, это Rails 4