2014-06-13 226 views
1

我被建議不要將數組存儲在我的數據庫中,而只是ID。在我的項目中,我存儲了訂單項的ID。如果我沒有line_item OBJECT,但只有ID,我是否仍然可以遍歷一個循環以獲取與它相關的所有數據?遍歷ID Ruby on Rails

爲了進一步解釋...

傳統我覺得我有

@line_item 
>> <LineItem id: 63, product_id: 2, created_at: time, (etc) > 

然後,我可以做類似

@line_item.title 
>> "T-Shirt:Small" 

但是,如果我做了

@line_item 
什麼

並得到

>>[12, 14] 

我可以做一個@ line.item.each並從視圖中的ID中獲取所需的全部信息嗎?或者我會不得不創造我自己的可怕方法?

希望我已經提出了我的問題可以理解。

謝謝。

回答

1

你可以這樣做:

@items = [12,14] # your list of ids you got from somewhere 
@items.each do |id| 
    @line_item = LineItem.find(id) # Get the instance for that id. 
    # do stuff. 
end 

你也可以做這樣的事情:

@line_items = LineItem.find(@id_list) 

如果要存儲的ID列表的原因是捕獲的關係,那麼你應該看看rails提供的belongs_to和has_many關係。通過存儲列表來取消規範化數據是令人討厭的,因爲您不知道列表會有多長。它會阻止你的數據庫正確索引,並且很難維護。

+1

'find'將非常高興地取得一組ID並返回一個可枚舉對象。 – sevenseacat

+0

好的謝謝。我會更新我的答案。 –

0

我建議你使用:

LineItem.where(id: [12,14]) 

因爲它總是會返回項目的數組。如果您嘗試查找不在數據庫中的項目,則會發現記錄未找到錯誤。如果沒有找到記錄,這將呈現一個空數組。

只要你有一個數組,不管是否爲空,你都不需要拯救.each方法,因爲它在任何情況下都不會失敗。