Rails アンチパターン - 色んな顔を持つコントローラ(Controller of Many Faces)
引き続きRails AntiPatternsという本を読んでいます。
https://www.amazon.co.jp/dp/B004C04QE0/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1
前回は4 Controllersの4つめ「Monolithic Controllers」についてまとめました。
今回は4 Controllersの5つめ「Controller of Many Faces」についてまとめます。
Controller of Many Faces
内容はMonolithic Controllersパート2という感じです。
コントローラの認証の部分は責務過多になりがちです。よくあるのはUsersControllerにlogin
やlogout
というアクションを実装してしまうケースです。
認証はユーザのセッションを管理しているため、操作対象のリソースをuserモデルにする必要がないということに気づきます。
Solution: Refactor Non-RESTful Actions into a Separate Controller
解決策としては、SessionsController
をつくり以下のようにアクションをもたせます。
class SessionsController < ApplicationController def new # ... end def create # ... end def destroy # ... end end
newがログイン画面、createがログイン、destroyがログアウトになります。
狭義のREST
newとeditは、実はRESTfulなアクションではありません。たとえばweb apiとしてRailsを使ったときに2つのアクションはなくなります。getアクションとして返すものはなく、RailsのviewのUIのためのアクションであることがわかります。 ただし、これ自体悪いことではなく、逆に自分のアプリケーションを作る際に、controllerに定義していいアクションとして更にプレビュー画面用のアクションを追加することもできます。
まとめ
この章で出てきたSessionsController#new, #create, #destroyは本当にあるある(device gemやRailsチュートリアル)なので覚えておきたいし広めていきたいなと思いました。