2011-07-06 74 views
1

我希望能够在活动记录查询(Rails 2.3.12)的:select部分中的MAX()sql调用中指定用户特定的条件。不幸的是,安全字符串插值似乎不适用于:select条件。代码如下,是否有其他方式来手动确保传入的值是安全的? (他们应该是因为他们仅仅是ID的,但你不能太肯定的。)在活动记录查询中选择的数组条件

:select => ["`component_instances`.*, max(`users`.id = ? AND `permissions`.view = 1) AS user_view, max(`users`.id = ? AND `permissions`.edit = 1) AS user_edit", user.id] 

查询旨在指示我,如果一个特定的用户在该网站的特定项目的明确许可。它会返回1(他们),0(他们不会但其他人)或零(没有人有明确的权限)。

回答

2

事实证明,你可以手动使用sanitize_sql_array方法来做到这一点:

:select => sanitize_sql_array(["`component_instances`.*, max(`users`.id = ? AND `permissions`.view = 1) AS user_view, max(`users`.id = ? AND `permissions`.edit = 1) AS user_edit", user.id, user.id])