ぞえの技術めも

Ruby on Rails勉強中

【26日目】【1日20分のRailsチュートリアル】基本クラスの拡張とコントローラクラスの学習&Userクラスの作成

Ruby on Railsチュートリアル(第3版)

今日は「4.4.3 組込みクラスの変更」から。

4.4.3 組込みクラスの変更

Rubyでは組み込みの基本クラスの拡張が可能なのです。Ruby のクラスはオープンで変更可能であり、クラス設計者でない開発者でもこれらのクラスにメソッドを自由に追加することが許されています。

基本クラスの拡張なんてできるんだ…!

>> class String
>>   def palindrome?
>>     self == self.reverse
>>   end
>> end
=> :palindrome?
>> "deified".palindrome?
=> true

こっちの方が楽そう。

真に正当な理由がない限り、組み込みクラスにメソッドを追加することは無作法であると考えられています。

そうですね。

Railsの場合、組み込みクラスの変更を正当化できる理由がいくつもあります。たとえば、Web アプリケーションでは、変数が絶対に空白にならないようにしたくなることがよくあります (ユーザー名などはスペースやその他の空白文字になって欲しくないものです) ので、Railsはblank?メソッドをRuby に追加しています。

へー。

>> "".blank?
=> true
>> "      ".empty?
=> false
>> "      ".blank?
=> true
>> nil.blank?
=> true

便利だけどblank?Railsの拡張であること忘れそう。。

4.4.4 コントローラクラス

Railsのコントローラで使うApplicationControllerについてクラス階層などの説明。
さくっと読んで終わり。

実は、Railsは確かにRubyで書かれていますが、既にRubyとは別物なのです。Railsのクラスは、普通のRubyオブジェクトと同様に振る舞うものもありますが、多くのクラスにはRailsの魔法の粉が振りかけられています。Railsは独特であり、 Rubyとは切り離して学習する必要があります。

RailsRubyを書くのとRubyだけ使って何かを作るのは別物なんだろうなー。

4.4.5 ユーザークラス

Userクラスを作成する前に「4.1 動機」の内容をコミットしておく。

$ git add -A
$ git commit -m "Custom helper"

よし、Userクラス作りましょう。
まずexample_user.rbファイルを作成。

$ touch example_user.rb

ファイルができたら中身を更新。

class User
  attr_accessor :name, :email

  def initialize(attributes = {})
    @name  = attributes[:name]
    @email = attributes[:email]
  end

  def formatted_email
    "#{@name} <#{@email}>"
  end
end

途中だけど今日はここまで。 今日の作業時間は【23分】

次は「4.4.5 ユーザークラス」のUserクラスの中身を見ていくところから。