Rails - фильтрация двух массивов на основе атрибута - PullRequest
0 голосов
/ 20 марта 2019

У меня есть модель Term, которая включает в себя атрибуты: title (просто заголовок), а также: accept и: pending (которые являются логическими значениями, указывающими, был ли Term утвержден модератором).На моей странице указателей Условия разделены по их атрибуту: accept и хранятся в массивах с именами @accepted и @ pending.

Может быть несколько Условий с одинаковым названием title, однако только один из них можетбыть принятым.

То, что я безуспешно пытаюсь сделать, это отфильтровать два массива по атрибуту: title, чтобы, если термин появился в массиве @approved, он не появился в массиве @pending.

Так что, если у меня есть:

@accepted = [{title: "TERM1", accepted: true, pending: false}]
@pending  = [{title: "TERM1", accepted: false, pending: true}, {title: "TERM2", accepted: false, pending: true}, {title: "TERM2", accepted: false , pending: true}]

После фильтрации, @pending будет содержать только второй и третий объекты (т.е. все, у которых нет названия «TERM1»).

Какя бы выполнил этот фильтр?

1 Ответ

1 голос
/ 20 марта 2019

Попробуйте это

accepted_terms_titles = @accepted.map { |t| t[:title] }
@pending.reject! { |t| accepted_terms_titles.include?(t[:title]) }
  1. Соберите все названия для принятых условий
  2. Отфильтруйте в массиве @pending термины, заголовок которых включен в массив accepted_terms_titles
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...