2014-04-10 27 views
0

我一直在为自行车共享程序开发的网站正在返回时髦的结果,我不知道这一个功能有什么问题。我正在尝试返回所有可用于检出的自行车。红宝石阵列不删除所有正确的数组元素

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辆自行车,出于某种原因,偶数车型都显示在所有的自行车都检出时他们在那里。

任何帮助,将不胜感激!

回答

1

如果检查到的方法确实分贝列,可以在查询中使用选择:

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

但你能解释更清洁你的问题。

+0

我有一系列的自行车,我想只有当这些自行车可以检出时才会返回。然而,该阵列正在返回不应该出现的自行车。这是否更有意义? –

+0

@TallPaul所以你只需要反转删除条件。或者颠倒'where'子句,这更复杂。 –

1

使用delete_if

自我删除的每一个元素的哪个块计算为true。

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

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

你这样做的方式,问题是,你遍历你从删除的容器,它混淆了红宝石。