【Rails】データベース上のデータをシンボルで取得
前置き
私はRails Tutorialを1周しただけの初心者ですから, いろいろツッコミどころがあるかもしれません. ご容赦くださいませ.
やりたいこと
たとえばボクサーのデータベースシステムを作るとします(ボクシング全然知りませんが...). データベースには名前(name
)と階級(weight
)を保存するものとします. テーブル例は以下の通りです.
id | name | weight |
---|---|---|
1 | Muhammad Ali | heavy |
2 | Shinsuke Yamanaka | bantam |
この場合, 取得される階級は文字列型ですね.
(irb) boxer = Boxer.first (irb) boxer.weight #=> 'heavy'
しかしアプリケーション内において, 階級はシンボルで扱いたいとしましょう. つまり以下のような動作を実現させたいわけです.
(irb) boxer.weight #=> :heavy
実装
答えはわりと簡単です. アクセサメソッドを上書きすればいいのです.
class Boxer < ApplicationRecord def weight read_attribute(:weight).to_sym end end
実はモデルにはread_attribute
というメソッドが用意されています. これをつかってattribute
を取得し, シンボルに変換しています.
最後に
そもそも階級と自然数を対応付けて, データベースには自然数を保存すればいいのかもしれませんね. 独自にモジュールやクラスを定義すれば, 上でやりたいことは実現できます.
さらにボクシングの階級は全順序集合ですから, 自然数との対応付けがより意味をなします. つまり階級順に取得したいときは, 自然数の自然な順序を利用すればいいということです.
なんだかまとまらない記事でお粗末様でございました.