【问题标题】:Rails and Padrino ActiveRecord ignores GROUP_CONCAT in .selectRails 和 Padrino ActiveRecord 忽略 .select 中的 GROUP_CONCAT
【发布时间】:2012-11-08 19:05:39
【问题描述】:

Rails 3 或 Padrino 中的 ActiveRecord 忽略了 .select 中的 GROUP_CONCAT

我试图弄清楚为什么 AcitveRecord 会忽略此查询:

Dvd.includes(:dvd_director, :dvd_producer).
      select(" 
      GROUP_CONCAT(DISTINCT dvd_director.director SEPARATOR ', ') AS director
      , GROUP_CONCAT(DISTINCT dvd_producer.producer SEPARATOR ', ') AS producer
      ...
      .where("id = 4")

查询被执行,但所有GROUP_CONCATs 都被忽略并且信息不在结果中。这是this question 的简化版,尚未得到答复。

我在某处读到您应该为此使用.cacluate,但这给了我一个错误。

什么给了?

【问题讨论】:

    标签: activerecord ruby-on-rails-3.2 padrino


    【解决方案1】:

    铁轨 4

    我的查询遇到了类似的问题:

    @project
    .fields_numbers_projects
    .select("*, GROUP_CONCAT(fields_numbers_projects.dates_project_id) AS dpid")
    .group(:group_id)
    .each do |fpn|
    

    ActiveRecord 的结果是:

    <#FieldsNumbersProject 
    id: 1, group_id: 1, project_id: 1, dates_project_id: 1, fields_project_id: 1, employee_id: nil>
    <#FieldsNumbersProject 
    id: 1, group_id: 2, project_id: 1, dates_project_id: 1, fields_project_id: 1, employee_id: nil>
    

    ActiveRecord 结果中没有“dpid”或只有 GROUP_CONCAT(dates_project_id) 的迹象,而您可以将其用作 fpn.dpid

    我被 ActiveRecord 结果骗了十分钟,没有尝试打印。

    【讨论】:

    • 我想我后来读到这不受支持,因为 AR 无法知道您正在使用哪种数据库技术,因此某些功能不可用。
    【解决方案2】:

    我想我后来读到这不受支持,因为 AR 无法知道您正在使用哪种数据库技术,因此某些功能不可用,而且显然 GROUP_CONCAT 并非对所有 SQL 技术人员都可用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-22
      • 1970-01-01
      相关资源
      最近更新 更多