2017-02-14 80 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