LoginSignup
1
0

More than 3 years have passed since last update.

Rails6 のちょい足しな新機能を試す55(enum blank label編)

Posted at

はじめに

Rails 6 に追加されそうな新機能を試す第55段。 今回は、 enum blank label 編です。
Rails 6 では、 enum で キー(ラベル) に、空文字を指定するとArgumentError が発生するようになりました。

Ruby 2.6.3, Rails 6.0.0.rc1, Rails 5.2.3 で確認しました。Rails 6.0.0.rc1 は gem install rails --prerelease でインストールできます。

$ rails --version
Rails 6.0.0.rc1

準備

今回は、 Rails6 のちょい足しな新機能を試す44(enum 編) を利用します。

Child モデルを修正する

Child モデルを修正して、 0 のキー(ラベル) に空文字 ('')を使うようにします。

app/models/child.rb
class Child < ApplicationRecord
  enum generation: { '' => 0, toddler: 1, preschool: 2, gradeschool: 3, teen: 4, young_adult: 5 }
end

マイグレーションの実行

マイグレーションを実行します。

$ bin/rails db:create db:migrate

rails console で確認する

rails console で動作確認します。
child = Child.new を実行すると ArgumentError が発生します。

$ bin/rails c
bash-4.4# bin/rails c
Running via Spring preloader in process 102
Loading development environment (Rails 6.0.0.rc1)
irb(main):001:0> child = Child.new
Traceback (most recent call last):
        3: from (irb):1
        2: from app/models/child.rb:1:in `<main>'
        1: from app/models/child.rb:2:in `<class:Child>'
ArgumentError (Enum label name must not be blank.)

最初に、 app/models/child.rb が評価された時点で ArgumentError が発生するので、
child = Child.new の代わりに、 require 'child' としても ArgumentError が発生します。

Rails 5 では

Rails 5.2.3 では、 ArgumentError にはなりません。

試したソース

試したソースは以下にあります。
https://github.com/suketa/rails6_0_0rc1/tree/try055_enum_blank

参考情報

1
0
0

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
1
0