Rails: получение массива идентификаторов объектов по запросу / преобразованию (для сравнения) - PullRequest
2 голосов
/ 03 сентября 2010

В основном, я хочу массив идентификаторов из базы данных.

Некоторый фон:

  • Я передаю список объектов (foos) пользователю с флажком.
  • Если пользователь устанавливает флажок, строка создается в другой таблице (столбце)
  • при рендеринге списка foo + + флажок Я хочу проверить, существует ли уникальный идентификатор любого заданного foo в массиве идентификаторов баров.

Я предполагал, что получение массива идентификаторов будет гораздо более эффективным, чем запрос к базе данных для каждого экземпляра foo при отображении списка foo с флажками.

Идеи? Заранее извиняюсь, если это не ясно.

Ответы [ 5 ]

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

мы можем использовать метод карты также таким образом

Model.all.map(&:field_name)
7 голосов
/ 10 сентября 2010

Я использовал метод карты:

@bars = Bar.all(:select => bar.id)
@bars = @bars.map{|bar| bar.id}

Затем я получаю массив идентификаторов.И только один запрос.

4 голосов
/ 13 ноября 2014

Более поздние версии Rails поддерживают Model.pluck(:field_name)

0 голосов
/ 02 февраля 2015
array1 = User.all.collect(&:id)

array1 имеет значения всех идентификаторов в таблице Users.

0 голосов
/ 03 сентября 2010

В чем проблема, чем?Если у вас есть рельсы has_many или has_and_belongs_to_many, рельсы получат идентификаторы для вас.Подробности смотрите в соответствующем учебном пособии , вкратце это похоже на @order_ids = @customer.order_ids.

В противном случае вы можете легко использовать обычный sql (или запрос активной записи).

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