Ruby on rails 如何从阵列中删除活动记录对象
我已在数组中设置了一组活动记录对象 我只想从数组中删除不在数据库中的对象Ruby on rails 如何从阵列中删除活动记录对象,ruby-on-rails,ruby,Ruby On Rails,Ruby,我已在数组中设置了一组活动记录对象 我只想从数组中删除不在数据库中的对象 a = Model.limit(2) 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.
a = Model.limit(2)
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
,这里可能会有一些混淆,因为在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)
背景:a.to\u a
将关系转换为内存中的数组。[b]
是一个数组,其中只有要删除的元素(在内存中)。a.to\u a-[b]
执行数组减法
(在Rails 3.2中,to_a在访问关系时自动应用于关系。我同意
gregates
:最好显式地将关系转换为数组)我可以看到匹配对象在bcan中可用。您可以提供模型的结构吗?。尝试使用其他模型,看看您的模型是否有任何问题。使用all
从关系中获取数组是个好主意。我试过了,to_a
也可以工作,可能更显式一些。all
在Rails 4.2中不再返回数组,to_a
返回数组。
a.to_a - [b]