gpt4 book ai didi

ruby-on-rails-4 - Ruby on Rails 连接多个表以及如何提取数据

转载 作者:行者123 更新时间:2023-12-01 23:54:31 26 4
gpt4 key购买 nike

我正在尝试为 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

我能够连接 tablesreservations 表,但无法将这三个表连接在一起。

我正在尝试显示完整的预订信息,包括用户的姓名和所在的餐 table 。

<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>

在 Controller 中我的加入看起来像

@reservations = reservation.joins(:tables, :users)

你能帮我吗?Rails 版本 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 代码以及他们预订的 table 会是这样的

    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 中生成的。

最佳答案

Rails 允许您在字符串中编写自定义连接条件,如下所示:

Reservation.joins('INNER JOIN "tables" ON "tables"."id" = "reservations"."table_id" INNER JOIN "users" ON "users"."id" = "reservations"."user_id"')

或者更简洁,只需指定几个连接子句:

Reservation.joins(:user).joins(:table)

要提取数据,您只需应用一些自定义select子句,如下所示:

Reservation.joins(:user).joins(:table).select("tables.seats AS table_seats")

与连接相同,您可以应用其中的多个。集合中返回的每个对象都将具有与您在“AS”之后定义的列名称相同的名称方法(在本例中它将是 。但有一个问题 - 所有这些都将作为字符串返回,因为 AR 不能真正猜猜那些是什么。

关于ruby-on-rails-4 - Ruby on Rails 连接多个表以及如何提取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17147431/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com