yutokyokutyo / rebuild_sample_app

https://railstutorial.jp/chapters/static_pages?version=5.0#cha-static_pages
https://rebuildsampleapp.herokuapp.com/
5 stars 0 forks source link

6章 #3

Closed yutokyokutyo closed 7 years ago

yutokyokutyo commented 7 years ago

コンソール上に出力するタイプの演習はissueで。

yutokyokutyo commented 7 years ago

6.2.3 長さを検証する

  1. 長すぎるnameとemail属性を持ったuserオブジェクトを生成し、有効でないことを確認してみましょう。
  2. 長さに関するバリデーションが失敗した時、どんなエラーメッセージが生成されるでしょうか? 確認してみてください。
user = User.new(name: "#{'a' * 51}", email: "#{'a' * 244 + '@example.com'}")
irb(main):014:0> user.save
   (0.2ms)  begin transaction
   (0.1ms)  rollback transaction
=> false
irb(main):017:0> user.errors.full_messages
=> ["Name is too long (maximum is 50 characters)", "Email is too long (maximum is 255 characters)"]
yutokyokutyo commented 7 years ago

6.3.2

  1. この時点では、userオブジェクトに有効な名前とメールアドレスを与えても、valid?で失敗してしまうことを確認してみてください。
  2. なぜ失敗してしまうのでしょうか? エラーメッセージを確認してみてください。
irb(main):001:0> user = User.new(name: "Yuto Kondo", email: "k.yuto.cre@gmail.com")
=> #<User id: nil, name: "Yuto Kondo", email: "k.yuto.cre@gmail.com", created_at: nil, updated_at: nil, password_digest: nil>
irb(main):002:0> user.errors.full_messages
=> []
irb(main):003:0> user.errors
=> #<ActiveModel::Errors:0x007faf81bec318 @base=#<User id: nil, name: "Yuto Kondo", email: "k.yuto.cre@gmail.com", created_at: nil, updated_at: nil, password_digest: nil>, @messages={}, @details={}>
yutokyokutyo commented 7 years ago

6.3.3

  1. 有効な名前とメールアドレスでも、パスワードが短すぎるとuserオブジェクトが有効にならないことを確認してみましょう。
  2. 上で失敗した時、どんなエラーメッセージになるでしょうか? 確認してみましょう。
irb(main):002:0> user = User.new(name: "Yuto", email: "k.yuto.cre@gmail.com", password: "kuro")
=> #<User id: nil, name: "Yuto", email: "k.yuto.cre@gmail.com", created_at: nil, updated_at: nil, password_digest: "$2a$10$mwD/Pn9JHDDJy0YXEQOsJO/z1cG7cZQt5af1kOnTQeQ...">
irb(main):004:0> user.valid?
  User Exists (0.2ms)  SELECT  1 AS one FROM "users" WHERE LOWER("users"."email") = LOWER(?) LIMIT ?  [["email", "k.yuto.cre@gmail.com"], ["LIMIT", 1]]
=> false
irb(main):005:0> user.errors.full_messages
=> ["Password is too short (minimum is 6 characters)"]
yutokyokutyo commented 7 years ago

password の文字列数を長くしたらtrueになった 👌

irb(main):008:0> user.password = "kurotaky"
=> "kurotaky"
irb(main):009:0> user.valid?
  User Exists (0.1ms)  SELECT  1 AS one FROM "users" WHERE LOWER("users"."email") = LOWER(?) LIMIT ?  [["email", "k.yuto.cre@gmail.com"], ["LIMIT", 1]]
=> true
yutokyokutyo commented 7 years ago

6.3.4

  1. コンソールを一度再起動して (userオブジェクトを消去して)、このセクションで作ったuserオブジェクトを検索してみてください。
  2. オブジェクトが検索できたら、名前を新しい文字列に置き換え、saveメソッドで更新してみてください。うまくいきませんね...、なぜうまくいかなかったのでしょうか?
  3. 今度は6.1.5で紹介したテクニックを使って、userの名前を更新してみてください。
irb(main):004:0> hoge = User.first
  User Load (0.1ms)  SELECT  "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT ?  [["LIMIT", 1]]
=> #<User id: 1, name: "Michael Hartl", email: "mhart@example.com", created_at: "2017-04-01 08:11:37", updated_at: "2017-04-01 08:11:37", password_digest: "$2a$10$Rzw7BeHGn1qH4XBC.effkebonD1kkZc9nvyOm8BndCS...">
irb(main):005:0> hoge.save
   (0.1ms)  begin transaction
  User Exists (0.3ms)  SELECT  1 AS one FROM "users" WHERE LOWER("users"."email") = LOWER(?) AND ("users"."id" != ?) LIMIT ?  [["email", "mhart@example.com"], ["id", 1], ["LIMIT", 1]]
   (0.1ms)  rollback transaction
=> false
irb(main):006:0> hoge.errors.full_messages
=> ["Password can't be blank", "Password is too short (minimum is 6 characters)"]
irb(main):008:0> hoge.name = "Yuto Kondo"
=> "Yuto Kondo"
irb(main):010:0> hoge
=> #<User id: 1, name: "Yuto Kondo", email: "mhart@example.com", created_at: "2017-04-01 08:11:37", updated_at: "2017-04-01 08:11:37", password_digest: "$2a$10$Rzw7BeHGn1qH4XBC.effkebonD1kkZc9nvyOm8BndCS...">
yutokyokutyo commented 7 years ago

completed! https://rebuildsampleapp.herokuapp.com