捗る!Ruby on Railsでscaffold駆動開発
最近Ruby on Railsの開発をするときに、色々参考にするためにscaffoldを叩くようにしています。 scaffoldのコードからどういうところが学べるのかを書いていきます。
scaffoldは誰もが通る道
きっとRailsを始める人は、Railsチュートリアルなり本なりで勉強することが多いはずです。scaffoldはそれらの中でRailsを始める第一歩として取り上げられることが多く、よってかなりの人がscaffoldのコードを目にしているはずです。
scaffoldから学べるポイント
コントローラで例外処理を書かない
scaffoldで作られるコントローラには、例外処理が一切ありません。しかし、ActiveRecord::RecordNotFound
になったら404が返るし、NoMethodError
は500が返るわけです。これによりコントローラでの関心事を少なくすることができます。多くのアプリケーションでは404や500のエラーページを専用のものを用意しますが、以下のようなプラクティスで、例外処理を共通化することができます。
Railsの404,500エラーページをカスタマイズ - Qiita
update系の成功失敗は戻り値で判断
jnchitoさんが以下の記事に書いてくださっています。 qiita.com save, update, destroyはバリデーションエラーが発生する可能性があり、その場合はエラーページではなく正常なページでバリデーションで引っかかった箇所をユーザに通知するのが望ましいです。エラーをraiseして500エラーページを出してはいけません。
ルーティングはRESTに
特に必要がなれけばconfig/routes.rbにはresources
でルーティングを定義するのが良いです。これにより全体のAPIインタフェースを合わせることができます。
namespaceありの場合の挙動
例えば以下のようなコマンドを打ったとしましょう
rails g scaffold foo/bar
すると、以下のようなモジュールが追加されます
module Foo def self.table_name_prefix 'foo_' end end
これにより、モジュール下のモデルにtable nameをいちいち書く必要がなくなります。 また、ルーティングもどのようにして書かなければならないかいつも覚えられないのですが、動作できるように追加してくれます。
だめなところもある
コントローラでbefore_action
でついてくるset_xxx
は実はもやもやしています。
scaffoldで書いてあるのくらいであればいいのですが、だんだん増えてコントローラのconcernで共通化やり出す発想になるのは避けたいところです。
まとめ
scaffoldをを叩いたときに学べるポイントをメインに書いていきました。 もっとみんなscaffoldを使ってほしい!!!!