Open Fendo181 opened 7 years ago
rails generate model User name:string email:string
セキュアなパスワードを追加する.
コントローラ名には複数形を使い、 モデル名には単数形を用いるという慣習を 頭に入れておいてください。 コントローラはUsersでモデルはUserです。
データベースを変更したくないので、コンソールをサンドボックスモードで起動します。
rails c --sandbox
ユーザオブジェクトを作ってデータベース(sandbox)にデータを格納した。
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
User.create(name: "A Nother", email: "another@example.org")
foo.destroy
本当にオブジェクトって消えたのかな?
調べてみる。
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メソッドを実行すると、データベースの情報を元にオブジェクトを再読み込みするので、変更が取り消されます。
reloadメソッド
update_attributesメソッド
Railsはblank?メソッドをRuby に追加しています。 Railsの拡張は自動的にRailsコンソールにも取り込まれるので、以下のようにコンソールで拡張の結果を確認できます (注意: 次のコードは純粋な irb では動作しません)。
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
before_save{self.email = self.email.downcase!}
before_save{self.email.downcase!}
before_save{email.downcase!}と置きかえられる。
before_save{email.downcase!}
やった事
rails generate model User name:string email:string
セキュアなパスワードを追加する.
わかった事
データベースを変更したくないので、コンソールをサンドボックスモードで起動します。
rails c --sandbox
ユーザオブジェクトを作ってデータベース(sandbox)にデータを格納した。
Active Active Record
User.create(name: "A Nother", email: "another@example.org")
foo.destroy
本当にオブジェクトって消えたのかな?
調べてみる。
オブジェクトはあるが、データベースの中からは見つからなかったので、例外が発生した。
-
reloadメソッド
を実行すると、データベースの情報を元にオブジェクトを再読み込みするので、変更が取り消されます。update_attributesメソッド
は属性のハッシュを受け取り、成功時には更新と保存を続けて同時に行います (保存に成功した場合はtrueを返します)。 ただし、検証に1つでも失敗すると、 update_attributesの呼び出しは失敗します。blank?メソッドとは何か?
正規表現
emailの小文字の判別。
before_save{self.email = self.email.downcase!}
をbefore_save{self.email.downcase!}
で置きかえられる。before_save{email.downcase!}
と置きかえられる。わからなかった事
資料