楷模...
InternalUser
has_many :internal_user_roles
has_many :roles, :through => :internal_user_roles
InternalUserRole
belongs_to :internal_user
belongs_to :role
Role
has_many :internal_user_roles
has_many :internal_users, :through => :internal_user_roles
使用新的 ActiveRecord 查询 API,我如何找到所有InternalUser
具有“ADMIN”角色?
换句话说,我如何生成这个查询......
SELECT
*
FROM
internal_users i, internal_user_roles ir, roles r
WHERE
i.id = ir.internal_user_id
AND
r.id = ir.internal_user_id
AND
r.name = 'ADMIN'
理想情况下,您应该从具有管理员角色的对象开始:
role = Role.find_by_name('ADMIN')
然后您可以简单地查询该角色的内部用户:
role.internal_users
如果您想更进一步,您应该注意 ActiveRecord 中的所有关联都可以进一步查询:
role.internal_users.where(:first_name => 'Bill').limit(5)
回到最初的问题,或者您可以查询InternalUser模型:
InternalUser.includes(:roles).where(['roles.id = ?', role])
或者也许更快一点,但代码方面更复杂:
InternalUser.includes(:internal_user_roles).where(['internal_user_roles.role_id = ?', role])
要直接翻译 SQL 查询,您还可以执行以下操作:
InternalUser.includes(:roles).where("roles.name = 'ADMIN'")
您还可以通过在末尾放置“to_sql”调用来查看 ActiveRecord 将生成的 SQL(对于任何这些查询),如下所示:
InternalUser.includes(:roles).where("roles.name = 'ADMIN'").to_sql
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)