2014-02-17 19 views
0

不知道如何標題這個問題,但它在這裏。上市數據依賴關聯數據庫

我有兩張桌子,Hotdesks和Bookings。用戶可以預訂hotdesk。

在我的控制器中,我有一個數組@eastdesks,其中包含位置爲「East」的所有辦公桌。

我想要做的是檢查這些書桌中哪些書已預訂並顯示可用書桌列表。這是我的控制器:

@eastdesk = Hotdesk.order("code ASC").where(:location => "East") 
@booking = Booking.all 

這是我到目前爲止的代碼:

<% @eastdesk.each do |ed| %> 
    <% @booking.each do |b| %> 
     <% if b.date == Date.today && b.type == "Hot Desk" %> 
      <% if b.desk == ed.code %> 
       <%= ed.code %> (Booked) 
      <% end %> 
     <% end %> 
    <% end %> 
<% end %> 

這隻能說明那些已經被預訂一空。

我很欣賞這是非常醜陋的,因爲我一直在玩。這很令人困惑,但是t表與預訂中的'desk'欄和eastdesk中的'code'欄相關聯。 (即,與桌子553預訂將連接到桌子與代碼553)希望是有道理的。感謝您的幫助

編輯----

目前有在@eastdesk陣列(E90和E23)2張辦公桌。 E90桌子已經預訂好了,E23桌子根本沒有被預定。對於上面的代碼,我得到以下輸出:

E90 (Booked) 

我想顯示的是沒有被預訂的辦公桌。我的漫遊辦公模式包括:

has_many :bookings 

我想加入以下到我的預訂模式,但我不知道,因爲AR不同類型的預訂,而不是所有的人都屬於熱辦公桌。

belongs_to :hotdesks 
+0

所以你要顯示的那還沒有被預訂?或兩者? – Agis

+0

理想情況下,我想顯示所有的桌子,然後有預定的那些被塗成紅色,但這是一個簡單的CSS事情,一旦我解決了這個問題 – MikeHolford

+0

你如何確定一個'Hotdesk'是否被預訂,編程? – Agis

回答

1

您可以在預訂表中創建一個陣列,並使用'include?'來保存'Desk Codes'。方法來檢查這個數組是否包含@eastdeck的'desk'值。

可能的解決方案:

@booking.map { |b| @booking_codes.push b.desk } // Creating a temporary array holding 'desk' from @booking 

查看:

<% @eastdesk.each do |ed| %> 
    <% @booking.each do |b| %> 
    <% if b.date == Date.today && b.type == "Hot Desk" && @booking_codes.include? b.desk %> 
     <%= ed.code %> (Booked) 
    <% end %> 
    <% end %> 
<% end %> 

PS:這可能不是最好的解決方案,但是它可以幫助:)

+0

感謝您的幫助!我有一個發揮這個! :) – MikeHolford

+0

我實際上沒有機會嘗試它,因爲我找到了不同的解決方案。當我有機會嘗試一下生病讓你知道! :) – MikeHolford