Sql Ruby Activerecord查询与范围比较
我必须查询需要管理档案的用户。 用户有一个min和max字段,如果档案编号的最后一个数字介于这两个值之间,则需要找到用户。 这与范围之间的大多数查询是相反的 目前,我必须使用纯sql,以下方法可以工作,但我希望使用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
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)