外连接不是关联的模型

时间:2014-11-23 16:11:56

标签: sql ruby-on-rails postgresql join activerecord

我想要使用activerecord创建以下SQL。我的问题是我陷入了逻辑循环,我无法LEFT OUTER JOIN一个尚未加入的表格,而且我找不到加入惨败的入口点

在activerecord中我正在尝试

AdMsgs.joins("LEFT OUTER JOIN shows ON ad_msgs.user_id = shows.id OR ad_msgs.user_id = shows.b_id ")
      .joins("LEFT OUTER JOIN m ON m.user_id = users.id OR m.m_id = shops.id OR m.m_id = shows.b_id")
      .joins("LEFT OUTER JOIN users ON ad_msgs.to = users.email OR ad_msgs.user_id = users.id OR users.id = m.user_id")
                    .where("shows.id = ?", self.id)
                    .distinct("ad_msgs.id")

查询输出一个错误,说它不知道第二个连接上的用户是什么(可能因为我还没有加入)但我需要根据用户选择m个记录

AdMsgs与这两个表都没有关联。

有没有办法全外连接这3个表然后选择相关的表(或任何更好的方法?)

1 个答案:

答案 0 :(得分:0)

使用find_by_sql来实现此类方案。

否则作为经验法则,如果您无法使用joins这样的Blog.joins(articles: :comments),那么您可能会做错事或使用find_by_sql代替。

在复杂的情况下,我首先在SQL中编写查询以验证所涉及的逻辑。通常用一个简单的查询替换一个复杂的查询(使用IN(*ids))是微不足道的。