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

时间:2014-04-10 18:59:50

标签: 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_inspection
  end
  bikes
end

所以它获取了所有的自行车,通过它们的id编号对它们进行排序并遍历每个自行车以查看它是否应该从它返回的数组中删除它。如果要修理自行车/更多维修/检查或未检查,则应该删除自行车。目前我正在使用20辆自行车,出于某种原因,当所有自行车都被检查出来时,偶数会显示它们在那里。

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

如果checked方法确实是db列,则可以在查询中使用selector:

Bike.order(:bike_id).where(need_repair: false, addtional_repair_need: false, checked_out: false, passed_inspection: true)

但你能否更清楚地解释一下你的问题。

答案 1 :(得分:1)

使用delete_if

  

删除块评估为true的self的每个元素。

     

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

bikes.delete_if { |bike| bike.need_repair || bike.addtional_repair_need || bike.checked_out || !bike.passed_inspection }

你正在做的方式,问题是你正在迭代你要删除的容器,这会让Ruby感到困惑。