我已经将范围添加到Rails模型,该模型允许使用范围根据指定的参数字段进行搜索。这里是什么样子:范围和字段作为参数在轨道中
scope :upcoming, lambda { |field|
where("to_char(#{field}, 'DDD') BETWEEN :alpha AND :omega",
alpha: Time.now.advance(days: 4).strftime('%j'),
omega: Time.now.advance(days: 8).strftime('%j'),
)
}
Event.upcoming(:registration) # Query all events with registration shortly.
Event.upcoming(:completion) # Query all events with completion shortly.
上述工作正常,但是在创造我读on Rails的指南中的红宝石,发现如下:
直接把变量进入条件的字符串将通过数据库原来的变量。这意味着它将直接来自可能具有恶意意图的用户的非转义变量。如果你这样做,那么你就把整个数据库置于危险之中,因为一旦用户发现他或她可以利用你的数据库,他们就可以做任何事情。永远不要直接在条件字符串中输入参数。
虽然范围目前从未与用户参数调用,我很好奇,如果设置字段,不使用插值,以更好地与上述建议符合的存在方式。我尝试过使用另一个命名参数,但是这会使用引号将字段转义(并因此导致它失败)。有任何想法吗?
但我认为OP在提问中提到“这将使用引号将字段转义出来(从而导致它失败) – rubyprince 2011-06-08 11:33:42