【问题标题】:ActiveRecord find query with join only doesn't include data from joined tableActiveRecord 仅使用联接查找查询不包括联接表中的数据
【发布时间】:2010-02-03 13:55:28
【问题描述】:

我有两个表:keyword_reports 和keywords(带有相关的AR 模型)。

keyword_reports 有一个keyword_id 列,我用它来加入关键字表,如下所示:

KeywordReport.find(:all, :joins => :keyword, :conditions => {:page_id => 10})

正确地拉回keyword_reports 的记录,但不包括连接关键字表中的数据。

我查看了日志以查看生成的 SQL,它正在执行:

SELECT `keyword_reports`.* from...

代替:

SELECT * from ...

我需要这样做才能获取所有数据。当我手动编辑 SQL 以根据需要格式化时,果然,它抓取了所有数据。我试过使用 :includes 和 :select 无济于事。

如何防止查询将结果仅限于第一个表?

【问题讨论】:

    标签: ruby-on-rails activerecord join find


    【解决方案1】:

    我遇到了同样的问题并使用以下方法解决了它:

    :select => '*'
    

    在我的情况下这是可行的,请注意表中具有相同名称的列。我认为只有其中一列可用。要解决这个问题,您可以使用:

    :select => '*, tbl1.field as field1, tbl2.field as field2'
    

    希望对你有帮助。

    【讨论】:

      【解决方案2】:

      认为您可能有错字。 :include(没有)应该这样做。

      KeywordReport.find(:all, :include => :keyword, :conditions => {:page_id => 10})

      这假设您在模型中设置了关系

      #KeywordReport
      belongs_to :keyword
      

      希望这能让你走上正轨

      【讨论】:

      • 您好,感谢您的回复。关系实际上是相反的。 #Keyword has_many :keyword_reports #KeywordReport belongs_to :keyword 基于此,我认为 :include 不会帮助我。生成的 SQL 是带有上述建议的两条语句,它们不执行连接。第二条语句只是尝试使用从keyword_reports 结果集中返回的keyword_id 中的IN 运算符查找关键字记录。也许我错过了一些东西,所以任何进一步的建议表示赞赏。
      猜你喜欢
      • 2019-08-04
      • 1970-01-01
      • 2017-03-10
      • 1970-01-01
      • 2011-07-30
      • 1970-01-01
      • 2018-09-04
      • 1970-01-01
      • 2011-10-04
      相关资源
      最近更新 更多