我在数组中有一组活动记录对象。
我只想从不在数据库中的数组中删除对象
a = Model.limit(2)
b = Model.first
a.delete(b)
返回零值
它没有删除
反正有吗?
我在数组中有一组活动记录对象。
我只想从不在数据库中的数组中删除对象
a = Model.limit(2)
b = Model.first
a.delete(b)
返回零值
它没有删除
反正有吗?
a.to_a - [b]
背景:a.to_a
将关系转换为内存中的数组。
[b]
是一个数组,仅包含要删除的元素(在内存中)。
a.to_a - [b]
进行数组减法。
(在 Rails 3.2 中,.to_a 在访问时自动应用于关系。我同意gregates
:最好将关系显式转换为数组)
这里可能存在一些混淆,因为 in ActiveRecord
,Model.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)
这就是你需要的:
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
.