0
0

文字列をTrue or Falseに変換する

Last updated at Posted at 2024-09-07

環境

Ruby2.6
Rails4.0

Booleanの判断の仕方

RubyにはBooleanClassというは存在していません。その代わり、FalseClass、TrueClassというのが存在します。なぜ、そのような設計をしたのだろうか。他言語から移行した人からしてみれば訝しく思うのも無理はない。

Boolean型つまり、FalseClassかTrueClassかの判断は、このようなやり方で判断することになります。

sample.rb
if params.is_a?(FalseClass) or params.is_a?(TrueClass)
    puts "いわゆるBoolean型です"
else
    puts "いわゆるBoolean型ではありません"
end

テスト結果

test.rb
params = true       # いわゆるBoolean型です
params = True       # エラーになります
params = TRUE       # エラーにはならないがwarningになる(広義の意味でエラー)
params = false      # いわゆるBoolean型です
params = False      # エラーになります
params = FALSE      # エラーにはならないがwarningになる(広義の意味でエラー)
params = ""         # いわゆるBoolean型ではありません
params = nil        # いわゆるBoolean型ではありません
params = 0          # いわゆるBoolean型ではありません
params = []         # いわゆるBoolean型ではありません
params = "aa"       # いわゆるBoolean型ではありません
params = 12         # いわゆるBoolean型ではありません

他言語から移行してきた人は目を疑うかも分かりませんが、True、Falseは有効になりません。true、falseと書きましょう。

Railsで文字列をtrue or falseに変換する

Railsで開発をしていて、Viewでチェックボックスにチェックをした場合はtrue、外した場合はfalseをGETで送信させることがありました。GETで送信されるデータは当然文字列です。TrueClassの属性を持たせたまま送信することはできません。

trueで送信したところで、実際には"true"という文字列で送信されます。Railsのコントローラーの中でparamsで拾った後、内部的に"true" or "false"ではなく、true or falseで判断させたい場合は、TrueClass、FalseClassに変換する必要があります。

その場合のやり方がこちらです。

sample.rb
params = {checkflg: "true"}
boolean = params[:checkflg] == "true"

if boolean.is_a?(TrueClass)
    puts "trueです"
elsif boolean.is_a?(FalseClass)
    puts "falseです"
elsif
    puts "いわゆるBoolean型ではありません"
end

"true"であれば、trueを返し、"true"以外であれば、falseを返します。

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0