Ruby Activerecord查询与范围进行比较

时间:2017-02-14 10:11:59

标签: sql ruby-on-rails 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语句?

1 个答案:

答案 0 :(得分:3)

没有SQL就不可能做到这一点,因为ActiveRecord不支持'<','>'的内置方法或者当前时刻的'BETWEEN'运营商。但你可以摆脱字符串插值,这是不安全的:

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