Как удалить элементы из набора результатов запроса Activerecord? - PullRequest
30 голосов
/ 22 сентября 2011

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

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

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

Ответы [ 4 ]

31 голосов
/ 22 сентября 2011

Использовать отклонить как в

Model.find_all_by_xxx().reject { |r| r.something? }
6 голосов
/ 22 сентября 2011
set = MyObject.find(...)
set = set.reject{|s| ... }

или

set = set.select{|s| ... }
2 голосов
/ 25 июля 2016

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

needed_ids = Model.where(<some original query>).map{|r| r.something? ? r.id : nil }.compact
new_collection = Model.where(id: needed_ids)
1 голос
/ 22 сентября 2011

Вы также можете использовать 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
=> []
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...