Rails-根据属性过滤两个数组

时间:2019-03-19 21:01:39

标签: ruby-on-rails ruby

我有一个术语模型,其中包括:title属性(仅是标题),以及:accepted和:pending属性(它们是布尔值,用于指示术语是否已被主持人批准)。在我的索引页面上,条款按其:accepted属性进行拆分,并存储在名为@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 个答案:

答案 0 :(得分:1)

尝试这个

accepted_terms_titles = @accepted.map { |t| t[:title] }
@pending.reject! { |t| accepted_terms_titles.include?(t[:title]) }
  1. 收集所有标题以获取接受的条款
  2. @pending数组中过滤出标题包含在accepted_terms_titles数组中的术语