0

私のモデルには次のメソッドがあります。

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

問題は、SQL ステートメントで「security_user_id」が正しく「変換」されていないことです。常に「0」と解釈されます。

これは、パラメータ値として「Instructor」と「9」を渡して生成された SQL の単純な出力です。

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 句をどのように変換すればよいか教えていただけますか?

4

1 に答える 1

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
于 2013-07-28T09:13:27.453 に答える