我在数组中设置了活动记录对象。
我只想从不在数据库中的数组中删除对象
a = Model.limit(2)
b = Model.first
a.delete(b)
返回零值
不删除
还有吗?
答案 0 :(得分:27)
a.to_a - [b]
背景:a.to_a
将关系转换为内存中的数组
[b]
是一个只有元素的数组,你要删除(在内存中)
a.to_a - [b]
执行数组减法。
(在Rails 3.2中.to_a在被访问时自动应用于关系。我同意gregates
:最好将关系明确地转换为数组)
答案 1 :(得分:14)
这里可能存在一些混淆,因为在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)
答案 2 :(得分: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
。