2017-02-14 59 views
0

我必须查询需要管理档案的用户。 用户有一个最小和最大字段,如果档案号码的最后一个号码在这两个值之间,用户需要找到。 这是围绕范围工作之间大多数查询的另一种方式。Ruby Activerecord查询与范围比较

目前我必须使用普通的sql,下面的工作,但我想使用activerecord查询(第一个错误)或至少一个更安全的方法(第二个错误)。

为了更好的可读性,我缩短了字段的名称。

dosnr = 123456 
# error invalid identifier 
# User.where(dosnr.to_s[-1] => :min..:max) 

# error invalid character 6 
# User.where("#{dosnr.to_s[-1]} between ? and ?, min, max ") 

# sql works 
User.where("#{dosnr.to_s[-1]} between min and max ") 

如何在不使用sql的情况下执行此操作,或者不必循环所有记录或不必使用多个where语句?

+0

'dosnr'是用户表中的一列吗?什么是数据类型?我相信在activerecord中没有这样的方法,你使用哪个SQL? – Surya

+0

no dosnr是一个变量,sql是最后一行 – peter

+0

这是否意味着min和max是列,并且您需要从dosnr变量的最后一个整数中查找所有用户b/w min和max? – Surya

回答

3

无法在没有SQL的情况下执行它,因为ActiveRecord在当前时刻不支持'<','>'或'BETWEEN'运算符的内置方法。但你可以去掉字符串插值,这是不安全的:

User.where('? between min and max', dosnr.to_s[-1]) 
+0

查询是不正确的。对于'dosnr = 123456',它将转换为'SELECT“用户。* FROM”users“WHERE 6 BETWEEN min and max',这不是期望的结果。 – Surya

+1

@Surya我不这么认为。 – Ilya

+0

不要拿我的话,自己试试。 – Surya