我有一组活动记录对象在数组中。如何从数组中删除活动记录对象
我只是想不在数据库中
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
convertrs关系到一个数组中在存储器中。
[b]
是一个数组,只是元素,你想删除(在内存中)。
a.to_a - [b]
做了一个数组减法。
(。在Rails 3.2 .to_a被自动地应用到当它被访问的关系我同意gregates
:这是更好地的关系转换为明确的阵列)
这是你所需要的:
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
。
有可能有些混乱,因为这里在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)
使用'all'从关系中获取数组的好主意。我试过了,'to_a'也可以工作,可能会更明确一些。 – semiomant
'all'在Rails 4.2中不再返回数组,'to_a'。 –
我可以看到匹配对象是在B无济于事 – sangeethkumar
你能提供你的模型的结构吗?试试其他模型,看看你的模型是否有问题。 – itz2k13