パーフェクトRuby on Railsを読む

前から手を出そうと思っていたパーフェクトRuby on Railsを読んでいき、気になったところをメモっていきます。

本自体の個人的な評価ですが、Rails入門本では飛ばされがちな細かい情報(知っていたほうが応用が利く情報)が網羅されていて、Railsでなんかアプリ作り出したくらいの人には最適と思いますし、逆にそこまで敷居も高くないと思います。

割と自分が知っている範囲の内容ではありますが、一部知らなかったことがあったりするのでその辺を書いていきます。

  • Scope定義した場合は、必ずActiveRecord::Relationを返す find_byなど、レコード検索時に該当データがない場合nilを返すメソッドについて、Scope定義結果がnilになった場合は、該当Scopeの検索条件を除外したクエリを発行して、必ずActiveRecord::Relationを返します。nilで返したい場合はクラスメソッドで定義する必要があるので注意。

  • ActiveRecordeでコールバックが実行されないメソッド ActiveRecordではバリデーション前後、更新前後などでコールバックにより処理を実行できる仕組みがあるが、一部実行できないメソッドがあるので注意。具体的には以下

    • decrement
    • decrement_counter
    • delete
    • delete_all
    • increment
    • increment_counter
    • toggle
    • touch
    • update_column
    • update_columns
    • update_all
    • update_counters
  • ルーティングにおけるmemberとcollection memberは個別のリソースに対するアクション、collectionは全体のリソースに対するアクションの設定 (idがいるとかいらないとかくらいの理解でよくわかってなかったですが、腹落ちしました。)

  • rescue_fromによる例外の扱い rescue_fromで指定したアクションで例外が発生した時のふるまいを独自に設定できる。例えばログインのアクション実行時にログイン失敗した場合はその画面を表示する、などが可能。 ApplicationControllerに指定することで、アプリケーション全体で設定できる。

  • respond_toによる表示の制御 respond_toでformat.htmlやformat.jsonをブロックで指定できる。これにより、リクエストヘッダやURLにより、どのフォーマットで画面表示をするかを制御できる。format.htmlとformat.jsonの2種類をrespond_toで指定する場合、~~.html(htmlの場合は拡張子不要と思われるが説明のためにあえてそう表記する)の場合はhtmlで、~~.jsonでアクセスした場合はjsonで画面表示される、という形で柔軟に対応が可能となる。html、json以外にもいくつかオプションがある。

  • variantsによるテンプレート切り替え ApplicationControllerに「request.varient」をコールバックで設定すると、アクセスした端末により、テンプレート表示を制御できる。例えばスマートフォンとPCで異なるテンプレートを表示したい場合などに有用

終わりに

今回は1,2章について自分が分からなかったところを中心にメモって行きました。最初ということもありそこまで真新しい話題はなかったです。章を追うごとに色々出てくると思います。 それにつれてブログの長さもどんどん長くなっていくんだろうなあ。。。

hontoの電子書籍はクーポンが充実していて非常にお得です。私もよくhontoの電子書籍を使っていますのでお勧めです(この本もこちらで買いました)