2016-03-28 134 views
1

我遇到了一个问题,我只需要从两个活动记录对象数组中删除重复项。唯一的一点是它只是从数据库中删除它,我只需要在这种情况下从数组中删除它。我跟着这个Remove object from an array of objects,也尝试了一些其他的东西,他们能够从内存中删除它,并显式地从数组中删除它,而不是数据库,但我无法复制它。任何建议都会很棒。谢谢大家!从数组中删除对象而不从数据库中删除它

company_links  = CompanyLinkType.where(company_id: company_ids, contact_linktype_id: 3) 
other_company_links = CompanyLink.where(company_id: company_ids, link_type: 'Twitter') 


company_links.each do |company_link| 
    other_company_links.each do |other_company_link| 
    # checks if id and url match, need to remove obj from company_link array 
    if other_company_link.company_id == company_link.company_id && other_company_link.url == company_link.contact_link_url 
     company_link.delete 
     Rails.logger.info"+++++++++DELETED++++++++++" 
    end 
    end 
end 
+0

:'company_links || other_company_links',它会返回你需要的相同结果。 –

回答

2

如果您不需要记录:如果两个数组有相同的类型,你可以将对象或类似两个数组的

company_links = company_links.reject do |company_link| 
    other_company_links.any? do |other_company_link| 
     company_link.company_id == other_company_link.company_id && other_company_link.url == company_link.contact_link_url 
    end 
end 
+0

嘿,谢谢,虽然我收到了这个错误。有任何想法吗? NoMethodError:未定义的方法'delete_if'for# Chris

+0

啊,你需要使用'reject',因为'delete_if' /'reject!'只在'Array'上定义,而不是'Enumerable '。我已经更新了我的答案。 –

0

变化company_link.deletecompany_links.delete(company_link)

+0

嘿谢谢,但它仍然从数据库中删除条目。 – Chris