Fendo181 / RoRTutorial_chap04

0 stars 0 forks source link

第6章 ユーザーのモデルを作成する #23

Open Fendo181 opened 7 years ago

Fendo181 commented 7 years ago

やった事

わかった事

コントローラ名には複数形を使い、
モデル名には単数形を用いるという慣習を
頭に入れておいてください。
コントローラはUsersでモデルはUserです。
irb(main):002:0> user = User.new(name:"Michael Hartl",email:"mhartl@example.com")
=> #<User id: nil, name: "Michael Hartl", email: "mhartl@example.com", created_at: nil, updated_at: nil>
irb(main):003:0> user.valid?
=> true

irb(main):004:0> user.save

   (0.1ms)  SAVEPOINT active_record_1
  SQL (0.5ms)  INSERT INTO "users" ("name", "email", "created_at", "updated_at") VALUES (?, ?, ?, ?)  [["name", "Michael Hartl"], ["email", "mhartl@example.com"], ["created_at", "2017-06-28
08:27:39.463974"], ["updated_at", "2017-06-28 08:27:39.463974"]]
   (0.1ms)  RELEASE SAVEPOINT active_record_1
=> true

Active Active Record

本当にオブジェクトって消えたのかな?

調べてみる。

irb(main):028:0> User.find(3)
  User Load (0.1ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ? LIMIT ?  [["id", 3], ["LIMIT", 1]]
ActiveRecord::RecordNotFound: Couldn't find User with 'id'=3
        from (irb):28

3番目のユーザーを削除したので、Active Recordはこのユーザーをデータベースの中から見つけることができませんでした。代わりに、findメソッドは例外 (exception) を発生します。例外はプログラムの実行時に何か例外的なイベントが発生したことを示すために使われます。この場合、存在しないActive Recordのidによって、findでActiveRecord::RecordNotFoundという例外が発生しました。

オブジェクトはあるが、データベースの中からは見つからなかったので、例外が発生した。

-reloadメソッドを実行すると、データベースの情報を元にオブジェクトを再読み込みするので、変更が取り消されます。

blank?メソッドとは何か?

Railsはblank?メソッドをRuby に追加しています。 Railsの拡張は自動的にRailsコンソールにも取り込まれるので、以下のようにコンソールで拡張の結果を確認できます (注意: 次のコードは純粋な irb では動作しません)。

正規表現

VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i

emailの小文字の判別。

before_save{email.downcase!}と置きかえられる。

わからなかった事

資料