Rails風味のRuby(その10)
WED(WeekEndDevelopers)のぽんたです。
開発スキルのないSIerからソフトウェアスキルを取得するため、WEDでモノづくりを計画しています。詳しい経緯はここ
※現在はruby on railsのチュートリアル(ここから)を進めていってます。
この章ではRubyの基礎知識を学んでいきます。(前回までの続き)
Ruby を学ぶためのツールとして、主にRailsコンソールを使っていくことにします。
これまでクラスや継承を勉強してきました。前の章でも似たような事やりました。
class StaticPagesController < ApplicationController def home end def help end def about end end
StaticPagesControllerはApplicationControllerを継承して定義されるhomeやhelp、aboutアクションを見ます。
?> controller = StaticPagesController.new => #<StaticPagesController:0x007fe7bd0ec9d0 @_action_has_layout=true, @_routes=nil, @_request=nil, @_response=nil> >> controller.class => StaticPagesController >> controller.class.superclass => ApplicationController >> controller.class.superclass.superclass => ActionController::Base >> controller.class.superclass.superclass.superclass => ActionController::Metal >> controller.class.superclass.superclass.superclass.superclass => AbstractController::Base >> controller.class.superclass.superclass.superclass.superclass.superclass => Object
Railsコンソールでは、その中からコントローラのアクション (実はメソッド) を呼ぶこともできます。
>> controller.home
=> nil
ここでは、homeアクションの中身は空なのでnilが返されます。
ここで重要な点があります。Railsのアクションには戻り値がありません。少なくとも、返される値は重要ではありません。第3章で示したとおり、home アクションはWebページを表示するためのものであり、値を返すためのものではありませんでした。しかも、第3章では一度もStaticPagesController.newを実行しませんでした。どうしてこれでうまくいっているのでしょうか。
実は、Railsは確かにRubyで書かれていますが、既にRubyとは別物なのです。Railsのクラスは、普通のRubyオブジェクトと同様に振る舞うものもありますが、多くのクラスにはRailsの魔法の粉が振りかけられています。Railsは独特であり、Rubyとは切り離して学習する必要があります。
演習1
第2章で作ったToyアプリケーションのディレクトリでRailsコンソールを開き、User.newと実行することでuserオブジェクトが生成できることを確認してみましょう。
?> User.new => #<User id: nil, name: nil, email: nil, created_at: nil, updated_at: nil>
演習2
生成したuserオブジェクトのクラスの継承階層を調べてみてください。 >> User.superclass => ApplicationRecord(abstract) >> User.superclass.superclass => ActiveRecord::Base >> User.superclass.superclass.superclass => Object >> User.superclass.superclass.superclass.superclass => BasicObject
今回はここまで次回また続きをやっていきます^^