Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.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
Arrays Ruby数组未删除所有正确的数组元素_Arrays_Ruby_Ruby On Rails 4 - Fatal编程技术网

Arrays Ruby数组未删除所有正确的数组元素

Arrays Ruby数组未删除所有正确的数组元素,arrays,ruby,ruby-on-rails-4,Arrays,Ruby,Ruby On Rails 4,我为自行车共享计划开发的一个网站正在返回时髦的结果,我不确定这个功能有什么问题。我正试图归还所有可以退房的自行车 def can_checked_out bikes = Bike.order(:bike_id).all bikes.each do |bike| bikes.delete bike if bike.need_repair or bike.addtional_repair_need or bike.checked_out or !bike.passed_inspect

我为自行车共享计划开发的一个网站正在返回时髦的结果,我不确定这个功能有什么问题。我正试图归还所有可以退房的自行车

def can_checked_out
  bikes = Bike.order(:bike_id).all
  bikes.each do |bike|
    bikes.delete bike if bike.need_repair or bike.addtional_repair_need or bike.checked_out or !bike.passed_inspection
  end
  bikes
end
因此,它获取所有的自行车,根据它们的id号对它们进行排序,并对每个自行车进行迭代,以查看是否应该将其从返回的数组中删除。如果自行车需要维修/更多维修/已退房或尚未检查,则应删除自行车。目前我正在使用20辆自行车,由于某些原因,当所有的自行车都退房时,偶数的自行车出现在那里


任何帮助都将不胜感激

如果选中的方法实际上是db列,则可以在查询中使用选择器:

Bike.order(:bike_id).where(need_repair: false, addtional_repair_need: false, checked_out: false, passed_inspection: true)
但是你能更清楚地解释你的问题吗。

使用:

删除块计算为true的self的每个元素

数组在每次调用块时立即更改,而不是在迭代结束后


您这样做的方式,问题是您正在对要从中删除的容器进行迭代,这会混淆Ruby。

我有一个自行车数组,只有当这些自行车可以签出时,我才想返回这些自行车。然而,阵列正在返回不应该出现的自行车。这更有意义吗?@TallPaul所以你只需要反转删除条件。或者颠倒
where
子句,这更复杂。
bikes.delete_if { |bike| bike.need_repair || bike.addtional_repair_need || bike.checked_out || !bike.passed_inspection }