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