2013-06-02 52 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'。 –