【问题标题】:Rails, active record. Joining four tables togetherRails,活动记录。将四个表连接在一起
【发布时间】:2016-05-14 00:04:11
【问题描述】:

我正在学习 ruby​​ on rails,但遇到了一个我无法解决的活动记录问题。我正在尝试将四个表内部连接在一起并显示其中的数据。

我已通过运行以下 SQL 样式查询确认我的数据库架构是正确的。它返回我期望的数据。

 select * from sailings
 INNER JOIN travelling_parties on sailings.id = travelling_parties.sailing_id
 INNER JOIN party_registers on travelling_parties.id = party_registers.travelling_party_id
 inner JOIN users on party_registers.user_id = users.id
 where users.id = 8

阅读完 guides.rubyonrails.org 上的精彩文档后,我仍然无法找到解决方案。下面的查询是我在控制器中提出的,但它似乎没有返回我需要的内容。

@sailing = Sailing.joins(:travelling_parties => [{:party_registers => :user}])

如果有人能引导我走向正确的方向,我将不胜感激。

谢谢

编辑 1:这是我的模型。我正在尝试检查 user.id = current_user.id 并据此显示数据。

class Sailing
  has_many :travelling_parties
end

class TravelingParty
  has_many :party_registers
  has_many :users, through: :party_registers
end

class PartyRegister
  belongs_to :user
  belongs_to :travelling_party
end

class User
  has_many :party_registers
  has_many :travelling_parties, through: :party_registers
end

编辑 2:以下查询给了我预期的结果

@sailing = Sailing.joins(:travelling_parties => {:party_registers => :user}).where("users.id" => current_user.id)

感谢您的回复。

【问题讨论】:

  • 你能发布你的模型吗?还想从用户表返回什么?

标签: ruby-on-rails activerecord


【解决方案1】:

您的答案接近正确假设您已经定义了关联。

class Sailing
  belongs_to :traveling_party
end

class TravelingParty
  belongs_to :party_register
end

class PartyRegister
  belongs_to :user
end

@sailing = Sailing.joins(:travelling_parties => {:party_registers => :user})

【讨论】:

  • 我有class Sailling has_many :travelling_parties, class TravelingParty has_many :party_registers has_many :users, through: :party_registers, class PartyRegister belongs_to :user belongs_to :travelling_party
猜你喜欢
  • 2017-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多