2012-11-27 32 views
0

處理外鍵所以我有一個表(姑且稱之爲A爲簡單起見),在這4個整數列(slot1slot2slot3slot4)。這4個對應於不同表格中的ID(B以保持示例)。的Rails 3.2,爲了

我需要從B的相應行中提取數據,但在這裏我遇到了一個問題。我試圖用where()方法,以獲取4個插槽,像這樣:

@a_item = A.where("publish_at <= ?", DateTime.now).last 
@slots = B.where(:id => [@a_item.slot1, @a_item.slot2, @a_item.slot3, @a_item.slot4]) if @a_item != nil 

但是,當然,槽的順序我已經回國不維護,它是由的的ID進行排序B對象。

因此,一個這樣做的骯髒的方法是單獨獲取所有4個項目,但在這之前,有沒有更好的方法來做到這一點或潛在的關係?

謝謝!

+0

不知道我明白你想要返回。您想要列出ID爲@a_item插槽數組的B對象的訂單嗎?你能否澄清訂單你想要的迴應是? – jwg2s

回答

1
@a_item = A.order(:published_at).last 
ids = [@a_item.slot1, @a_item.slot2, @a_item.slot3, @a_item.slot4] unless @a_item.nil? 
@slots = B.find(ids) unless ids.nil? 
results = ids.map { |id| @slots.detect { |slot| slot.id == id } } 

我會讓你添加其餘的韌性檢查和故障檢測,因爲沒有什麼會返回到你期望的東西。

+0

謝謝,這解決了我的問題! – fiiv