【问题标题】:Problems with an ActiveRecord join queryActiveRecord 连接查询的问题
【发布时间】:2014-11-25 20:34:06
【问题描述】:

我在使用 ActiveRecord 解决查询时遇到问题。查询描述为:“返回与代理创建的行程相关的行程”

这是我尝试过的:

trips = Trip.where("agent_id = ? AND is_itinerary", params[:id])
        .joins('LEFT JOIN itineraries ON trips.id = itineraries.trip_id LEFT JOIN users ON itineraries.user_id = users.id')
         .select('trips.*, itineraries.status, users.*')

结果似乎还可以,但问题是记录的返回 id。它们是重复的,而不是 Trip.id,看起来返回的 id 是 User.id。

有人知道如何解决它吗?也许改变默认分组策略?

表格是:行程(id、trip_id、user_id)、旅行(id、...)、用户(id、...)

【问题讨论】:

  • 我认为users.* 正在覆盖id 中来自trips.* 的列,是否有理由在一个查询中一次加载所有内容而不是两个单独的急切加载的查询?
  • 嗯,没有任何特殊原因。您是否建议将查询分成两部分?第一个必须有行程用户加入的部分,不是吗?

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


【解决方案1】:

我终于可以解决分离原始查询的问题了:

trips = Trip.where("agent_id = ? AND is_itinerary", params[:id]).joins('LEFT JOIN itineraries ON trips.id = itineraries.trip_id').select('trips.*, itineraries.status')
            trips = trips.joins("LEFT JOIN users ON itineraries.user_id = users.id").select("users.*")

以这种方式执行,Users.* 属性不会覆盖 Trips 属性。

【讨论】:

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