2013-04-29 170 views
0

我在我的模型中使用了此方法,以允許我的視圖顯示與車輛相關的所有設備。我是否應該使用find_each來檢查批記錄,如果是這樣,我將如何分解這種方法來使用它?find_each活動記錄查詢

def equip(vehicle) 
    equip = Vehicle.find_by_id(vehicle).equipments. 
     where("vehicle_id = ?", vehicle).all 
end 
+0

是'vehicle'車輛的ID? – Deekor 2013-04-29 20:09:50

+0

@Deekor - 是的,當我從視圖中調用該方法時,我正在傳入vehicle.id。它通過設備表查找並查找分配給給定車輛的所有設備。 – 2013-04-29 20:10:46

+1

下面的答案應該足夠了。只是一個側面說明,你應該可以直接調用'Vehicle.find(vehicle)..'而不是'find_by_id' – Deekor 2013-04-29 20:16:38

回答

1

不要在最後使用.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 
+0

實現它,但得到未定義的方法ID。當我拿出vehicle.try(:id)時,它工作得很好。另外,我應該考慮find_each?我現在對它的理解是,這會將整個設備表加載到內存中,然後開始處理 – 2013-04-29 20:15:55

+0

@SamThode更新;) – MrYoshiji 2013-04-29 20:18:30