如何将参数传递给exists子句?

时间:2013-07-28 08:53:14

标签: ruby-on-rails-3 activerecord parameter-passing 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

问题是“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子句以便将它与参数一起使用?

1 个答案:

答案 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