ruby-on-rails-4 – Ruby on Rails连接多个表以及如何提取数据
发布时间:2020-12-17 01:29:55 所属栏目:百科 来源:网络整理
导读:我正在尝试在 Ruby on Rails上为餐馆预订系统.我有三个表:用户,表和预订. ‘users’包含列’id’,’name’,’email’,’phone’和’totalPersons’. ‘table’有列’id’和’seat’. ‘reservations’包含列’id’,’user_id’,’table_id’和’begin_datet
我正在尝试在
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) 你能帮助我吗? 编辑: 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不能真正猜猜那些是什么. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |