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 }