こんにちは、hachi8833です。
今回、「Crafting Rails 4 Applications」という一人で読むとくじけそうなRuby on Rails上級者向け技術本を読み通してみようじゃないのという社内企画に参加いたしました。噂に違わず、初心者などまるで相手にしていない濃厚な内容で、一つの章に大小様々な秘法がめいいっぱい詰め込まれています。正直自分のレベルではちょっと無謀でしたが、上級者の世界をいろいろ垣間見ることができました。あれはもしかすると走馬灯だっのかもしれません。
自分が担当した第2章「Building Models with Active Model」のスライドを掲載します。
その他の回へのリンク
- 第一回:Crafting Out Own Renderer
- 第二回:Building Models with Active Model(このページ)
- 第三回:Retrieving View Templates from Custom Stores
- 第四回:Senging Multipart Emails Using Template Handlers
- 第五回:Streaming Server Events to Clients Asynchronously
- 第六回:Writing DRY Controllers with Responders
- 第七回:Managing Application Events with Mountable Engines
- 第八回:Translating Applications Using Key-Value Back Ends
第2章のメモ
RailsのActive Recordといえば、属性(=データベースのテーブル)を定義すると自動的にその属性を名前に取り込んだメソッドが使えるようになる機能で有名です。2章ではActiveModel::AttributeMethodsを使用して同じことをやってみています。具体的にはattribute_method_prefix()やattribute_method_suffix()などを使用します。
この機能の背後で活躍しているのが、黒魔法とすら呼ばれるmethod_missing()メソッドです。このメソッドを知ったのは『メタプログラミングRuby』という本ですが、どうもこのメソッドについて「家庭から出る排水口にかぶせて大事なものを寸前でキャッチするためのストッキング」みたいなものをついつい連想してしまいました。
自作のモデルをActive Record APIに準拠させるにはinclude ActiveModel::Modelするだけでできてしまうのですが、それをあえて複数のステップに分解し、ActiveModel::Lint::Testsで確認しながら、そこで行われている動作をみっちり解説してくれています。
何かの参考になれば幸いです。