Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何从阵列中删除活动记录对象_Ruby On Rails_Ruby - Fatal编程技术网

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]