我的模型中有以下方法:
def is_user_in_role (security_user_id, role) SecurityUser.joins(:security_users_roles) .where(security_users_roles:{role:role}) .exists?("security_users.id=#{security_user_id}") end
问题是“security_user_id”在SQL语句中没有正确“翻译”。它总是被解释为“0”。
这是生成的SQL传递'Instructor'和'9'作为参数值的简单输出:
SecurityUser Exists (0.0ms) SELECT 1 AS one FROM security_users INNER JOIN security_users_manage_securities ON security_users_manage_securities.security_user_id = security_users.id INNER JOIN security_users_roles ON security_users_roles.id = security_users_manage_securities.security_users_role_id WHERE security_users_roles.role = 'Instructor' AND security_users.id = 0 FETCH FIRST ROW ONLY
你可以在最后看到:
security_users.id = 0
你能否告诉我如何转换exists子句以便将它与参数一起使用?
答案 0 :(得分:0)
我找到了它。为了传递exists子句中的参数,您应该使用如下数组:
def is_user_in_role (security_user_id, role)
SecurityUser.joins(:security_users_roles)
.where(security_users_roles:{role:role})
.exists?(["security_users.id=#{security_user_id}"])
end