Поиск их по одному бесполезно расточительно. Вы можете не заметить пустую трату с небольшими числами, с которыми вы имеете дело, но вредные привычки - это вредные привычки, и, в общем, хорошие привычки лучше.
Вы должны загрузить все записи, которые вам нужны, одним попаданием в базу данных. Если они нужны вам как объекты, тогда Set объектов (или хеш, который отображает их идентификаторы на объект) будет иметь смысл; если вам нужно только знать, существуют ли они, добавьте метод в модель примерно так:
def self.valid_ids_from(ids)
# Ask the database which things in the `ids` array it has
# and put those in `ids_that_are_there`.
Set.new(ids_that_are_there)
end
Тогда вы могли бы сделать что-то вроде этого:
known_ids = Pancake.valid_ids_from(incoming_ids)
good, bad = incoming_ids.partition { |x| known_ids.include?(x) }
Вы можете использовать Hash , если вам не нравится Set , разница для чего-то подобного незначительна.
Как обычно, конкретная реализация зависит от ваших требований. Но не бойтесь добавлять в свои модели методы, которые собирают и массируют определенные коллекции данных.