Posted at

Rails チュートリアル メモ 第4章

More than 1 year has passed since last update.


概要


  • この章は Rails というより Ruby の説明がメインだった

  • Ruby 自体にはそれなりに慣れ親しんでいたので、あまり学びはなかった


メモ


ヘルパーモジュールのインクルード


単なるRubyのコードを書くのであれば、モジュールを作成するたびに明示的に読み込んで使うのが普通ですが、Railsでは自動的にヘルパーモジュールを読み込んでくれるので、include行をわざわざ書く必要がありません。


そうなんだ。

ヘルパーモジュールのソースは app/helpers/ 配下にある。

application_helper.rb には、アプリ全体で使うヘルパーを書く。

xxx_helper.rb には、xxx コントローラーでだけ使うヘルパーを書く。


blank? メソッド

Rails では、スペースが集まってできた文字列 (" ") を空とみなせる判定メソッド blank? が存在する。

"      ".empty? # => false

" ".blank? # => true

この blank? メソッドは ActiveSupport という拡張によって実装されており、ピュアな Ruby には存在しない。しかも Object クラスを開いて再定義されている。


Rails におけるクラス


ここで重要な点があります。Railsのアクションには戻り値がありません。少なくとも、返される値は重要ではありません。第3章で示したとおり、home アクションはWebページを表示するためのものであり、値を返すためのものではありませんでした。しかも、第3章では一度もStaticPagesController.newを実行しませんでした。どうしてこれでうまくいっているのでしょうか。

実は、Railsは確かにRubyで書かれていますが、既にRubyとは別物なのです。(略)... Railsは独特であり、Rubyとは切り離して学習する必要があります。


コントローラークラスについては、例えば「インスタンス変数を定義するとビューで参照できるようになるのはなんでだろう」みたいなことはもはや考えない方がいいのかもしれない。クラスの皮を被った何かと捉えた方がいいのかもしれない。

一方で、モデルクラスについては一般的な Ruby におけるクラスの考え方を持ち込んでもよさそうだ。Rails Console からモデルクラスのインスタンスを new すれば、モデル単体の動作を確認することができる。そもそもモデルクラスは、Web アプリだろうが CLI アプリだろうが関係なく、そのアプリの本質的なロジックを担う役割がある。だから、モデルクラスに関してはそれ単体で動作確認ができるべきなんだと思う。言い方を変えると、コントローラーから呼び出されないと価値が発揮できないようなモデルクラスは設計が間違っている、と言ってよいのではないか。