列挙型の値を保存するときはintegerで保存しとけActiveRecord::Enum
列挙型とは、有限集合として持つ抽象データのことで例えばstatus
なんかがそうです。
stasus: [:active, :archived]
みたいなやつ。
例えば、Conversation
クラスにstatus
カラム(active, archived)を持っている場合を考えてみましょう。
主な保存方法としては2パターンあります。
- stringで保存('active'とか'archived'を文字列のまま保存)
- integerで保存(
{ active: 0, archived: 1 }
の対応をどこかで保持し、DBには数字のみを保存)
一長一短ありますが、Railsでは今後、2
の方を推奨していくようですね。(一般的に、1
はバッドパターンらしいですね。何となくわかりますがきちんと理解してない。。
http://edgeapi.rubyonrails.org/classes/ActiveRecord/Enum.html
class Conversation < ActiveRecord::Base enum status: [ :active, :archived ] end # conversation.update! status: 0 conversation.active! conversation.active? # => true conversation.status # => "active" # conversation.update! status: 1 conversation.archived! conversation.archived? # => true conversation.status # => "archived" # conversation.update! status: 1 conversation.status = "archived" # conversation.update! status: nil conversation.status = nil conversation.status.nil? # => true conversation.status # => nil
こんなような感じで使えるみたいです。 詳しくはAPIを読みましょう。
http://edgeapi.rubyonrails.org/classes/ActiveRecord/Enum.html
Crafting Rails 4 Applications: Expert Practices for Everyday Rails Development
- 作者: Jose Valim
- 出版社/メーカー: Pragmatic Bookshelf
- 発売日: 2013/11/21
- メディア: ペーパーバック
- この商品を含むブログを見る