Подтвердить что ты не робот

Как удалить элементы из набора результатов запроса Activerecord?

Я получаю набор результатов из запроса поиска Rails. Я хочу перебрать этот набор результатов и в зависимости от определенных критериев удалить записи из этого набора результатов, прежде чем передавать его для дальнейшей обработки. Дополнительные критерии являются внешними по отношению к данным, хранящимся в базе данных, и поэтому я не могу включить их в исходный запрос "Найти".

Примечание. Я не хочу удалять записи из базы данных, просто удаляя их из набора результатов.

Пожалуйста, кто-нибудь может дать мне код для этого.

4b9b3361

Ответ 1

Используйте reject, как в

Model.find_all_by_xxx().reject { |r| r.something? }

Ответ 2

set = MyObject.find(...)
set = set.reject{|s| ... }

или

set = set.select{|s| ... }

Ответ 3

Вы также можете использовать delete_at:

irb(main):005:0> c = Category.all
Category Load (0.3ms)  SELECT "categories".* FROM "categories" 
=> [#<Category id: 1, name: "15 anos", description: nil, created_at: "2011-09-22 04:52:53", updated_at: "2011-09-22 04:52:53">]
irb(main):006:0> c.delete_at(0)
=> #<Category id: 1, name: "15 anos", description: nil, created_at: "2011-09-22 04:52:53", updated_at: "2011-09-22 04:52:53">
irb(main):007:0> c
=> []

Ответ 4

Если некоторая обработка должна выполняться в коде приложения, который не может выполнить SQL, и результатом должен быть измененный объект запроса, повторный запрос объектов с помощью id может быть (очень неэффективным).

needed_ids = Model.where(<some original query>).map{|r| r.something? ? r.id : nil }.compact
new_collection = Model.where(id: needed_ids)