Rails 3 выбирает только значения - PullRequest
2 голосов
/ 02 августа 2011

В рельсах 3 я хотел бы сделать следующее:

SomeModel.where(:some_connection_id => anArrayOfIds).select("some_other_connection_id")

Это работает, но я получаю следующее из БД:

[{"some_other_connection_id":254},{"some_other_connection_id":315}]

Теперь эти идентификаторыЭто те, которые мне нужны, но я не в состоянии сделать запрос, который только дает мне идентификаторы.Я не хочу пересматривать результаты, только чтобы получить эти цифры.Есть ли способ для меня сделать это с чем-то вроде:

SomeModel.where(:some_connection_id => anArrayOfIds).select("some_other_connection_id").values()

Или что-то из этого nautre?

Я пытался с ".select_values ​​()" найден в Git-hub , но он возвращает только "some_other_connection_id".

Я не эксперт по рельсам, поэтому эта информация может быть также полезна:

"SomeModel" - этосоединительный стол, для отношения многих ко многим в одной из моих других моделей.Таким образом, обычно я пытаюсь из массива идентификаторов получить все записи с другой стороны соединения.В основном у меня есть исходные идентификаторы, и я хочу получить данные из моделей со всеми целевыми идентификаторами.Если есть волшебный способ получить это без того, чтобы я сам делал все sql (с некоторой помощью активной записи), это было бы здорово!

Спасибо:)

Ответы [ 2 ]

9 голосов
/ 13 апреля 2013

Попробуй Смотри Метод

SomeModel.where(:some => condition).pluck("some_field")

работает как

SomeModel.where(:some => condition).select("some_field").map(&:some_field)
3 голосов
/ 02 августа 2011
 SomeModel.where(:some_connection_id => anArrayOfIds).select("some_other_connection_id").map &:some_other_connection_id 

Это, по сути, сокращение для:

 results = SomeModel.where(:some_connection_id => anArrayOfIds).select("some_other_connection_id")
 results.map {|row| row.some_other_connection_id}

Посмотрите на Array # map для деталей о map методе.

Остерегайтесь, что тамздесь не ленивая загрузка, так как она перебирает результаты, но это не должно быть проблемой, если вы не хотите добавлять больше конструкций к вашему запросу или извлекать некоторые связанные объекты (что не должно иметь место, поскольку вы не получилиидентификаторы для загрузки связанных объектов).

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