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

zlx_star · 2013年08月21日 · 最后由 zlx_star 回复于 2013年08月22日 · 2529 次阅读

现在有三张表如下:

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 楼 已删除

reviewer 继承 User,并且 belongs_to app

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

需要 登录 后方可回复, 如果你还没有账号请 注册新账号