シンプルなケース
LIKE
文字列/テキストタイプ用です。主キーは整数であるため、代わりに数学演算を使用する必要があります。
id
100で割ったときの値の余りを取得するには、モジュロを使用します。
Item.where("id % 100 = 88")
これにより、列がで終わるItem
レコードが返されますid
88
1288
1488
1238872388
862388
等...
最後の2桁の任意のセットと一致します
これを動的に実行する場合(たとえば、任意の2桁のセットと照合しますが、常に2桁になることがわかっている場合)、次のように実行できます。
Item.where(["id % 100 = ?", last_two_digits)
任意のセットまたは最終桁数と一致します
任意の桁数を一致させたい場合は、それらが常に最後の桁である限り(フィールドの他の場所に表示される桁ではなくid
)、モデルにカスタムメソッドを追加できます。何かのようなもの:
class Item < ActiveRecord
...
def find_by_final_digits(num_digits, digit_pattern)
# Where 'num_digits' is the number of final digits to match
# and `digit_pattern` is the set of final digits you're looking fo
Item.where(["id % ? = ?", 10**num_digits, digit_pattern])
end
...
end
id
このメソッドを使用すると、で終わる値を見つけることができます88
。
Item.find_by_final_digits(2, 88)
任意の長さの最後の桁の範囲と一致します
なんらかの理由で、との間のid
数字で終わるすべての値を検索したいとします。多分それらはあなたが探しているコードのいくつかの特別な範囲を表しています。これを行うには、Postgres'を使用して範囲を検索する別のカスタムメソッドを実行できます。 09
12
BETWEEN
def find_by_final_digit_range(num_digits, start_of_range, end_of_range)
Item.where(["id % ? BETWEEN ? AND ?", 10**num_digits, start_of_range, end_of_range)
end
...そして以下を使用して呼び出すことができます:
Item.find_by_final_digit_range(2, 9, 12)
...もちろん、これはすべて少しクレイジーで、おそらくやり過ぎです。