Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Ruby Activerecord查询与范围比较_Sql_Ruby On Rails_Ruby_Activerecord - Fatal编程技术网

Sql Ruby Activerecord查询与范围比较

Sql Ruby Activerecord查询与范围比较,sql,ruby-on-rails,ruby,activerecord,Sql,Ruby On Rails,Ruby,Activerecord,我必须查询需要管理档案的用户。 用户有一个min和max字段,如果档案编号的最后一个数字介于这两个值之间,则需要找到用户。 这与范围之间的大多数查询是相反的 目前,我必须使用纯sql,以下方法可以工作,但我希望使用activerecord查询(第一个错误)或至少使用更安全的方法(第二个错误) 为了更好的可读性,我缩短了字段的名称 dosnr = 123456 # error invalid identifier # User.where(dosnr.to_s[-1] => :min..:m

我必须查询需要管理档案的用户。 用户有一个min和max字段,如果档案编号的最后一个数字介于这两个值之间,则需要找到用户。 这与范围之间的大多数查询是相反的

目前,我必须使用纯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语句的情况下执行此操作?

没有sql是不可能的,因为ActiveRecord目前不支持“”或“BETWEEN”运算符的内置方法。但您可以消除不安全的字符串插值:

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

没有SQL是不可能做到这一点的,因为ActiveRecord目前不支持“”或“BETWEEN”运算符的内置方法。但您可以消除不安全的字符串插值:

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


dosnr
是用户表中的一列吗?数据类型是什么?我相信在activerecord中没有这样的方法,您使用的是哪种SQL?没有dosnr是一个变量,SQL是最后一行,这是否意味着min和max是列,您需要从dosnr变量的最后一个整数中查找所有用户b/w min和max???@Surua是的它是
dosnr
是users表中的一列?数据类型是什么?我相信在activerecord中没有这样的方法,您使用的是哪种SQL?不,dosnr是一个变量,SQL是最后一行,这是否意味着min和max是列,您需要从dosnr变量的最后一个整数中查找所有用户b/w min和max???@Surua是的,它是不正确的。对于
dosnr=123456
,它将转换为
选择“用户”。*从“用户”中选择最小值和最大值之间的6
,这不是期望的结果。@Surya我不这么认为。不要相信我的话,自己试试。@Ilya:你说得对。我继续读,完全没有读到。这也可以写成
User。其中(“?%10介于min和max之间”,dosnr)
Query不正确。对于
dosnr=123456
,它将转换为
选择“用户”。*从“用户”中选择最小值和最大值之间的6
,这不是期望的结果。@Surya我不这么认为。不要相信我的话,自己试试。@Ilya:你说得对。我继续读,完全没有读到。这也可以写成
User。其中(“?%10介于min和max之间”,dosnr)