こんにちは!kossyです!
さて、今回はRubyでRangeオブジェクトを使って、ある数値がRangeオブジェクトの範囲内に含まれているかどうかを
チェックするやり方をブログに残してみたいと思います。
環境
Ruby 2.5.1
実装
先に実装を晒します。
# number は Pokemonクラスのカラム名です。 def pokedex if (1..9) === number "00#{number}" elsif (11..99) === number "0#{number}" else number end end
irbで(1..9)の正体を調べます。
irb(main):001:0> (1..9) => 1..9 irb(main):002:0> (1..9).class => Range
どうやらRangeクラスのオブジェクトらしいです。
class Range (Ruby 2.6.0)
(0..9)でRangeクラスのオブジェクトを生成し、 === 演算子で numberが(0..9)の間に含まれているかをチェックしています。
チェックしたのち、numberの値が範囲(1..9)内であれば、numberの前に00を付与した文字列を返します。
numberの値が範囲(11..99)内であれば、numberの前に0を付与した文字列を返します。
ではコンソールで実行してみましょう。
[1] pry(main)> @pokemon = Pokemon.find 1 Pokemon Load (0.7ms) SELECT `pokemons`.* FROM `pokemons` WHERE `pokemons`.`id` = 1 LIMIT 1 => #<Pokemon:0x00007fae29fcc568 id: 1, number: 1, name: "フシギダネ", type_1: "くさ", type_2: "どく", hp: 45, attack: 49, defense: 49, sp_attack: 65, sp_defense: 65, speed: 45, total: 318, created_at: Tue, 13 Aug 2019 13:02:29 UTC +00:00, updated_at: Tue, 13 Aug 2019 13:02:29 UTC +00:00> [2] pry(main)> @pokemon.pokedex => "001"
期待通りの動作をしています。
ある数値が指定した範囲内にあるかを調べるにはRangeオブジェクトを用いれば良さそうです。