2013-07-28 38 views
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 

的問題是,「security_user_id」沒有在SQL語句中「翻譯」正確。它總是被解釋爲「0」。

這是生成的SQL的一個簡單的輸出通過「導師」和「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

我已經找到它了。爲了傳遞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