Active Record查询上select的数组条件

时间:2011-07-06 03:46:46

标签: sql ruby-on-rails activerecord

我希望能够在活动记录查询的:select部分(Rails 2.3.12)中的MAX()sql调用中指定用户特定条件。不幸的是,安全字符串插值似乎不适用于:select条件。代码如下,有没有其他方法可以手动确保传入的值是安全的? (他们应该是因为他们只是身份,但你永远不能确定。)

: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(他们不会,但其他人会这样做),或者是nil(没有人有明确的权限)。

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])