我必须查询需要管理档案的用户。 用户具有最小和最大字段,并且如果档案号的最后数字在这两个值之间,则需要找到用户。 这是范围工作之间大多数查询的另一种方式。
目前我必须使用普通的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 :(得分:3)
没有SQL就不可能做到这一点,因为ActiveRecord不支持'<','>'的内置方法或者当前时刻的'BETWEEN'运营商。但你可以摆脱字符串插值,这是不安全的:
User.where('? between min and max', dosnr.to_s[-1])