我正在尝试为 Ruby on Rails 中的餐厅制作预订系统。我有三张桌子:用户、桌子和预订。'users' 有 'id'、'name'、'email'、'phone' 和 'totalPersons' 列。'table' 具有列 'id' 和 'seats'。'reservations' 具有列 'id'、'user_id'、'table_id' 和 'begin_datetime'。
模型如下所示:
class User < ActiveRecord::Base
has_many :reservations
has_many :tables, :through => :reservations
end
class Table < ActiveRecord::Base
has_many :reservations
has_many :users, :through => :reservations
end
class Reservation < ActiveRecord::Base
belongs_to :table
belongs_to :user
end
我能够加入tables
和reservations
表,但我无法将三个表加入在一起。
我正在尝试显示完整的预订,其中包含姓名和用户所在的桌子。
<table>
<thead>
<tr>
<th>Reserverings ID</th>
<th>Tafel nummer</th>
<th>Seats</th>
<th>User</th>
<th>Begint om</th>
<th></th>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<% @tables.each do |table| %>
<tr>
<td><%= reservation.id %></td>
<td><%= reservation.table_id %></td>
<td><%= table.seats %></td>
<td><%= user.name %></td>
<td><%= reservation.begin_datetime %></td>
<td><%= link_to 'Show', table %></td>
<td><%= link_to 'Edit', edit_table_path(table) %></td>
<td><%= link_to 'Destroy', table, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
</tbody>
</table>
在控制器中,我的加入看起来像
@reservations = reservation.joins(:tables, :users)
你能帮助我吗?导轨版本 4.0
编辑:在http://guides.rubyonrails.org/我看到
Post.joins(:comments => :guest)
生成的 SQL 是:
SELECT posts.* FROM posts
INNER JOIN comments ON comments.post_id = posts.id
INNER JOIN guests ON guests.comment_id = comments.id
我猜我的所有用户预订的 SQL 代码和他们预订的桌子看起来像
SELECT * FROM reservations, users, tables
INNER JOIN reservations ON reservations.user_id = users.id
INNER JOIN reservations ON reservations.table_id = tables.id
也许这会为你澄清事情。所以现在我需要知道它是如何在 ruby on rails 中产生的。