一个结构:
class User < ActiveRecord::Base
has_many :members
end
class Member < ActiveRecord::Base
belongs_to :user
has_many :member_roles
end
class MemberRole < ActiveRecord::Base
belongs_to :member
belongs_to :role
end
class Role < ActiveRecord::Base
end
我要根据一个 role,找到所有 user。可以用:
uids = MemberRole.where(role_id: role.id).joins({member: :user}).pluck('users.id')
User.where(id: uids)
User.where("id in (select user_id from members where id in (select member_id from member_roles where role_id=#{role.id}))")
前一个方法一堆中间值,后一个方法丑陋的 SQL,这种查询很常见,请问大家有什么好的方法?好像可以用squeel
弄好看一些?
恩,还有一个方法:
User.joins({members: :member_roles}).where("member_roles.role_id" => role.id)