方法
Rails 4
ActiveRecord::AttributeMethods#[] あるいは
ActiveRecord::AttributeMethods::Read#read_attribute を使います。
# Rails 4.2.8
class Conversation < ActiveRecord::Base
enum status: [:active, :archived]
end
conversation.status #=> "archived"
conversation[:status] #=> 1
conversation.read_attribute(:status) #=> 1
conversation.read_attribute_before_type_cast(:status) #=> "1"
conversation.status_before_type_cast #=> "archived"
Rails 5
前述した Rails 4 の方法では整数値が取得できなくなりました。代わりに ActiveRecord::AttributeMethods::BeforeTypeCast#read_attribute_before_type_cast あるいは
%{カラム名}_before_type_cast
という名前のメソッドを使います。
# Rails 5.0.2
class Conversation < ActiveRecord::Base
enum status: [:active, :archived]
end
conversation.status #=> "archived"
conversation[:status] #=> "archived"
conversation.read_attribute(:status) #=> "archived"
conversation.read_attribute_before_type_cast(:status) #=> 1
conversation.status_before_type_cast #=> 1
Rails 4 とかなり振る舞いが変わっているので、注意が必要ですね。