2011-11-21 54 views
1

我有一个嵌套数组,并且想要删除与我的模型上的信息匹配的条目。基于模型来过滤嵌套数组

我的阵列看起来大致是这样的:

[{"id"=>"72157627540544488", "primary"=>"6090588224", "photos"=>"49", "videos"=>0, "title"=>"Title1", "description"=>""}, 
{"id"=>"72157627309708150", "primary"=>"5987891163", "photos"=>"49", "videos"=>0, "title"=>"Title2", "description"=>""}, 
{"id"=>"72157626646787712", "primary"=>"5687687064", "photos"=>"11", "videos"=>0, "title"=>"Title3", "description"=>""}, 
{"id"=>"72157626646672290", "primary"=>"5687629990", "photos"=>"33", "videos"=>0, "title"=>"Title4", "description"=>""}] 

而且我的模型:

id    :integer   not null, primary key 
name    :string(255) 
set_id   :integer 
thumb_url  :string(255) 
created_at  :datetime 
updated_at  :datetime 

我试图做到的是从数组中删除所有的元素,其中的id值在我模型中的任何set_id中都是重复的。

回答

1

你可以这样做:

array.reject{|element| Model.exists?(:set_id => element['id'])} 

其中阵列是阵列和模型是模型类。这将返回一个新数组,其中带有重复ID的元素被删除。

Array.reject返回数组的副本,而不包含传入的块返回true的元素。

ActiveRecord.exists?如果数据库中存在具有给定条件的模型,则返回true。

+0

它的工作!只是想知道是否有办法做同样的事情,但使用另一个数组而不是Model。 “包括?”诀窍? – Gustavo

+0

我试图做同样的事情,但使用实例变量而不是模型来避免对数据库的另一个查询。我想出了这个:'array.reject {| element | @ variable.any {?|条款| item.set_id ==元素['id']}}' – Gustavo

+0

是的,这工作。我不能真正想到一个更简洁的方式来做到这一点与数组。 – aubreyrhodes