如何用Ruby on Rails 4连接多个表并高效提取相关数据?

2026-04-11 16:451阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计717个文字,预计阅读时间需要3分钟。

如何用Ruby on Rails 4连接多个表并高效提取相关数据?

我正在尝试在Ruby on Rails上开发一个餐厅预订系统。我有三个表:用户(users)、餐桌(tables)和预订(reservations)。其中,users表包含列:id、name、email、phone和totalPersons。而tables表包含列:id和seat。最后,reservations表包含预订信息。

如何用Ruby on Rails 4连接多个表并高效提取相关数据?

我正在尝试在 Ruby on Rails上为餐馆预订系统.我有三个表:用户,表和预订. ‘users’包含列’id’,’name’,’email’,’phone’和’totalPersons’. ‘table’有列’id’和’seat’. ‘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

我能够加入桌子和预订表,但我无法加入这三个.

我试图显示一个完整的预订名称和用户在什么表.

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

你能帮助我吗?
Rails版本4.0

编辑:
在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中产生.

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)

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

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

与join相同,您可以应用其中的几个.集合中返回的每个对象都具有与在“AS”之后定义列名称相同的名称方法(在这种情况下它将是.虽然有一个捕获 – 所有这些将作为字符串返回,因为AR不能真正猜猜那些是什么.

本文共计717个文字,预计阅读时间需要3分钟。

如何用Ruby on Rails 4连接多个表并高效提取相关数据?

我正在尝试在Ruby on Rails上开发一个餐厅预订系统。我有三个表:用户(users)、餐桌(tables)和预订(reservations)。其中,users表包含列:id、name、email、phone和totalPersons。而tables表包含列:id和seat。最后,reservations表包含预订信息。

如何用Ruby on Rails 4连接多个表并高效提取相关数据?

我正在尝试在 Ruby on Rails上为餐馆预订系统.我有三个表:用户,表和预订. ‘users’包含列’id’,’name’,’email’,’phone’和’totalPersons’. ‘table’有列’id’和’seat’. ‘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

我能够加入桌子和预订表,但我无法加入这三个.

我试图显示一个完整的预订名称和用户在什么表.

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

你能帮助我吗?
Rails版本4.0

编辑:
在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中产生.

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)

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

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

与join相同,您可以应用其中的几个.集合中返回的每个对象都具有与在“AS”之后定义列名称相同的名称方法(在这种情况下它将是.虽然有一个捕获 – 所有这些将作为字符串返回,因为AR不能真正猜猜那些是什么.