我在我的模型中使用了此方法,以允許我的視圖顯示與車輛相關的所有設備。我是否應該使用find_each來檢查批記錄,如果是這樣,我將如何分解這種方法來使用它?find_each活動記錄查詢
def equip(vehicle)
equip = Vehicle.find_by_id(vehicle).equipments.
where("vehicle_id = ?", vehicle).all
end
我在我的模型中使用了此方法,以允許我的視圖顯示與車輛相關的所有設備。我是否應該使用find_each來檢查批記錄,如果是這樣,我將如何分解這種方法來使用它?find_each活動記錄查詢
def equip(vehicle)
equip = Vehicle.find_by_id(vehicle).equipments.
where("vehicle_id = ?", vehicle).all
end
不要在最後使用.all,它會在它被調用時觸發查詢,並且會成爲一個痛苦的表現。
此外,你應該使用這個語法(Rails 3中):
def equip(vehicle)
equip = Equipment.where(vehicle_id: vehicle.try(:id) || vehicle)
end
利用這一點,你只使用設備型號,將只使用equipments
SQL表(而不是2或更多)。
# This line
vehicle.try(:id) || vehicle
# Allows you to pass both a Vehicle object or a vehicle id to your method
另外,如果你已經有車的情況下,你可以使用:
def equip(vehicle)
equip = Vehicle.where(id: vehicle).first.equipments
# or with your syntax:
equip = Vehicle.find(vehicle).equipments
end
實現它,但得到未定義的方法ID。當我拿出vehicle.try(:id)時,它工作得很好。另外,我應該考慮find_each?我現在對它的理解是,這會將整個設備表加載到內存中,然後開始處理 – 2013-04-29 20:15:55
@SamThode更新;) – MrYoshiji 2013-04-29 20:18:30
是'vehicle'車輛的ID? – Deekor 2013-04-29 20:09:50
@Deekor - 是的,當我從視圖中調用該方法時,我正在傳入vehicle.id。它通過設備表查找並查找分配給給定車輛的所有設備。 – 2013-04-29 20:10:46
下面的答案應該足夠了。只是一個側面說明,你應該可以直接調用'Vehicle.find(vehicle)..'而不是'find_by_id' – Deekor 2013-04-29 20:16:38