【问题标题】:activerecord complex joinsactiverecord 复杂连接
【发布时间】:2019-08-28 16:42:42
【问题描述】:

我有一个多对多的关系,我想获得一个用户的所有汽车的所有用户。最有效的联接是什么?

基本上,我想知道如何使用 activerecord 执行以下操作 complex SQL query, many to many

【问题讨论】:

  • 你能发布你的模式来加入这个连接吗?这将是非常有益的。但是,鉴于您的描述,User.where(id: User.joins(:cars).select('users_cars.user_id').where(id: some_user_id)) 不适合您吗?

标签: ruby-on-rails postgresql activerecord


【解决方案1】:
class User < ApplicationRecord
  def people_who_use_my_car
    self.cars.users
  end
end

在您的控制器或视图或任何您想使用它的地方:

@user = User.first
@users = @user.people_who_use_my_car

【讨论】:

  • 我认为这需要一种方法来展平结果或加入,例如User.joins(:cars).where(cars: {user: self})
【解决方案2】:

一个简单的方法是

class User < ApplicationRecord
  def people_who_use_my_car
    self.cars.inject([]).do |users, car|
      users += car.users
      users
    end
  end
end

但这并不像@poet 建议的那样使用数据库,

class User < ApplicationRecord
  def people_who_use_my_car
    User.joins(:cars).where(cars: {user: self})
  end
end

【讨论】:

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