はじめに
enum
を使う時はprefix
を使いましょう、という提案です。
なぜprefixを使うと良いのか
1.可読性が上がる、2.拡張性が高くなるからです。
可読性が上がる
class Article < ApplicationRecord
belongs_to :user
enum :status, { unsaved: 10, draft: 20, published: 30 }, _prefix: status
end
_prefix
がない場合も一見わかりやすいですが、個人的には_prefix
を付与することで、モデル
のこのカラム
のこのステータスの状況
が一目でわかりやすくなります。
_prefixがない場合
[3] pry(main)> article.published?
=> true
[4] pry(main)> article.draft?
=> false
[5] pry(main)> article.unsaved?
=> false
class Article < ApplicationRecord
belongs_to :user
enum :status, { unsaved: 10, draft: 20, published: 30 }, prefix: status
end
_prefixがある場合
[3] pry(main)> article.status_published?
=> true
[4] pry(main)> article.status_draft?
=> false
[5] pry(main)> article.status_unsaved?
=> false
拡張性が高くなる
例えば、同じようなステータスがある場合、重複によりエラーが出てしまいます。
class Conversation < ActiveRecord::Base
enum status: { active: 0, archived: 10 }
enum comments_status: { active: 0 inactive: 10 }
end
irb(main):004:0> c = Conversation.find(1)
ArgumentError (You tried to define an enum named "comments_status" on the model "Conversa
このような時も、あらかじめprefix
を設定しておけば重複せずに管理することができます。
class Conversation < ActiveRecord::Base
enum status: [:active, :archived], prefix: true
enum comments_status: [:active, :inactive], prefix: true
end
[3] pry(main)> conversation.status_active?
=> true
[5] pry(main)> conversation.comments_status_active?
=> true