スリ飯屋Malankaのフリーエンジニアな日々

IT実務未経験から約1年、東京でフリーランスのRuby on Railsエンジニアに転職。約2年半、大阪中崎町でスリランカカレーの間借りしてました。フリーランスエンジニアになるためのノウハウ、スリランカの事を発信していきます。

【Rails】SymbolとStringの違いとenumについて

シンボルと文字列

・シンボル

  • オブジェクトidが一意に振られる。一つのシンボルは常に同一のオブジェクト。なのでメモリの節約になる。

  • 変更が加えられない(イミュータブル)

class Symbol (Ruby 2.7.0 リファレンスマニュアル)

・文字列

  • オブジェクトidが毎回変わる。別のオブジェクト。

  • 変更される(ミュータブル)

enum

数値型のカラムを、文字列やシンボルで参照出来る。

ActiveRecord::Enum

enum型のカラムに、無効な値を入れるとArgumentErrorを返す

=やmergeなどで、enumで定義されていない値を入れようとすると、以下のようにArgumentErrorを返します。

ArgumentError: 'hoge' is not a valid status

参考

https://tech.misoca.jp/entry/2015/08/10/132419

enum型のカラムに値を設定する
シンボル
文字列
数値

どれでも設定可能です。

が、個人的には - 変更が加えられない(イミュータブル) - オブジェクトidが一意のため、メモリを節約出来る

という理由から、シンボルを使うことが多いです。