Rails 如何获取一个 app 里面所有的监督人?

zlx_star · August 21, 2013 · Last by zlx_star replied at August 22, 2013 · 2613 hits

现在有三张表如下:

class App < AR::Base
   has_many :users
end

class User < AR::Base
   belongs_to :app
   has_one :user_info

  # columns: app_id, ... others
end

class UserInfo < AR::Base
   belongs_to :user

  # columns: user_id, reviewer_id, ... others
end

user_infos 表里面有个字段为 reviewer_id 指向 users 里面的一条记录。

现在我想找出一个 app 下面的所有监督人?

很普通的需求吧!但是由于扩展表显得很复杂。

目前我的方法 (app 为某个特定 app)

User.where(id: UserInfo.where(user_id: app.users.map(&:id)).map(&:reviewer_id))

我自己看着都别扭,😔 所以请教更清晰的办法~~~

reviewer_ids = app.users.joins(:user_info).pluck("DISTINCT reviewer_id").compact
User.find_all_by_id reviewer_ids

#1 楼 @mouse_lin 不要用 map,用 pluck;不要用 uniq,用 DISTINCT

#1 楼 @mouse_lin @_kaichen 说的对,先从数据库层入手。

#2 楼 @_kaichen #3 楼 @zgm pluck 的确是快很多,代码已经更新;

5 Floor has deleted

reviewer 继承 User,并且 belongs_to app

#6 楼 @leonworld 请教现有表结构不变的情况下,如何查询呢?

You need to Sign in before reply, if you don't have an account, please Sign up first.