列出依赖于相关数据库的数据

时间:2014-02-17 16:37:09

标签: ruby-on-rails database associations

不知道如何标题这个问题,但在这里。

我有两张桌子,Hotdesks和预订。用户可以预订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表与预订中的“桌面”栏和东区的“代码”列相关联。 (即通过办公桌553预订将链接到桌面,代码为553)希望这是有道理的。谢谢你的帮助

编辑----

目前@eastdesk阵列中有2个办公桌(E90和E23)。 E90服务台已经预订了今天,E23服务台根本没有预订。对于上面的代码,我得到以下输出:

E90 (Booked)

我想要展示的是尚未预订的办公桌。我的Hotdesk模型包括:

has_many :bookings 

我在考虑将以下内容添加到我的预订模型中,但我不确定是否存在不同类型的预订,并且并非所有预订都属于热门办公桌。

belongs_to :hotdesks

1 个答案:

答案 0 :(得分:1)

您可以在预订表中创建一个包含“桌面代码”的数组,并使用“include?”检查此数组是否包含@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:这可能不是最好的解决方案,但它可能有所帮助:)