2013-06-02 49 views

回答

23
a.to_a - [b] 

背景:a.to_a convertrs关系到一个数组中在存储器中。
[b]是一个数组,只是元素,你想删除(在内存中)。
a.to_a - [b]做了一个数组减法。

(。在Rails 3.2 .to_a被自动地应用到当它被访问的关系我同意gregates:这是更好地的关系转换为明确的阵列)

1

这是你所需要的:

objects_in_db = Model.all 
objects_in_array = Model.first(2) 
objects_in_array.delete_if { |obj| !objects_in_db.include?(obj)} 

在你的情况,Model.limit(2)可能不返回前两个对象,所以这个阵列a可能不包含b,因此,它返回nil

+0

我可以看到匹配对象是在B无济于事 – sangeethkumar

+0

你能提供你的模型的结构吗?试试其他模型,看看你的模型是否有问题。 – itz2k13

13

有可能有些混乱,因为这里在ActiveRecordModel.limit(2)不返回数组。

Model.limit(2).class #=> ActiveRecordRelation 

所以,当你调用a.delete(b),你可能不叫Array#delete

尝试此代替:

a = Model.limit(2).to_a # Executes the query and returns an array 
b = Model.first 
a.delete(b) 
+0

使用'all'从关系中获取数组的好主意。我试过了,'to_a'也可以工作,可能会更明确一些。 – semiomant

+2

'all'在Rails 4.2中不再返回数组,'to_a'。 –