4.1
リスト4.1で例として、app/views/layouts/application.html.erbの以下のコードを取り上げている。
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
Rubyを知らなければ、この表記は戸惑うんだろうなあ。Ruby的には
stylesheet_link_tag( 'application', media: 'all', {'data-turbolinks-track': 'reload' })
なので、引数3つのメソッド呼び出しである。
ちなみに、キーワード引数がなかった昔のRubyではこれは
stylesheet_link_tag( 'application', {:media => 'all', 'data-turbolinks-track' => 'reload'} )
だった。そして、実はあんまりキーワード引数の仕様にくわしくないので、この辺りの私の理解は曖昧だ。
それはいいとして、これを「Railsの組込関数」と表現されると悩ましい。 Rubyではすべてはメソッドで、「Rubyの組込関数」とはKernelモジュールのメソッドのことだからだ。
Rails APIのリファレンスへのリンクが示されているのでそこを見ると、このメソッドは
ActionView::Helpers::AssetTagHelper
のメソッドらしい。
ということは、このERBが評価されるコンテキストではAssetTagHelper
がincludeされているということだ。
しかし、「なんだこのメソッド?」と思ったときに所属しているクラスを突き止めるのは大変そうだな。
・・・などと思うんだけど、それはたぶん先を読めば書いてある(笑)。先に進もう。
4.1.2はカスタムヘルパーだ。置き場所としてapp/helpers/application_helper.rbが最初から作られてるので、 そこにメソッドを作ってみようとのこと。ふむふむ。
楽しみのために仕様を理解して、リスト4.2を見ないで作ってみる。
module ApplicationHelper def full_title(page_title = '') out = ["Ruby on Rails Tutorial Sample App"] out.unshift page_title unless page_title.empty? out.join(" | ") end end
テストがないと不安だな。これをレイアウトに適用してみる。うん、ちゃんと動いているようだ。
あとは4.2からこの章の最後まで、バージョン1.4から付き合っているRubyistとしては特に新しい知識はなかった。