はじめに
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