Komei22 / rails-tutorial

rails-tutorialのsample_app作っていきます
0 stars 0 forks source link

ch13.1.4演習 #87

Closed Komei22 closed 7 years ago

Komei22 commented 7 years ago

演習1

Micropost.first.created_atの実行結果と、Micropost.last.created_atの実行結果を比べてみましょう。

irb(main):010:0> Micropost.first.created_at
  Micropost Load (0.3ms)  SELECT  "microposts".* FROM "microposts" ORDER BY "microposts"."id" ASC LIMIT ?  [["LIMIT", 1]]
=> Tue, 11 Jul 2017 07:12:38 UTC +00:00
irb(main):011:0> Micropost.last.created_at
  Micropost Load (0.3ms)  SELECT  "microposts".* FROM "microposts" ORDER BY "microposts"."id" DESC LIMIT ?  [["LIMIT", 1]]
=> Tue, 11 Jul 2017 07:39:01 UTC +00:00

演習2

Micropost.firstを実行したときに発行されるSQL文はどうなっているでしょうか? 同様にして、Micropost.lastの場合はどうなっているでしょうか? ヒント: それぞれをコンソール上で実行したときに表示される文字列が、SQL文になります。

演習1の結果から、firstとした時はASC LIMITで昇順、lastとした時はDESC LIMITで降順となっている。

演習3

データベース上の最初のユーザーを変数userに代入してください。そのuserオブジェクトが最初に投稿したマイクロポストのidはいくつでしょうか? 次に、destroyメソッドを使ってそのuserオブジェクトを削除してみてください。削除すると、そのuserに紐付いていたマイクロポストも削除されていることをMicropost.findで確認してみましょう。

irb(main):014:0> user.microposts.first
  Micropost Load (0.2ms)  SELECT  "microposts".* FROM "microposts" WHERE "microposts"."user_id" = ? ORDER BY "microposts"."id" ASC LIMIT ?  [["user_id", 1], ["LIMIT", 1]]
=> #<Micropost id: 1, content: "Lorem ipsum", user_id: 1, created_at: "2017-07-11 07:12:38", updated_at: "2017-07-11 07:12:38">

irb(main):015:0> user.destroy
   (0.1ms)  begin transaction
  SQL (2.0ms)  DELETE FROM "users" WHERE "users"."id" = ?  [["id", 1]]
   (2.9ms)  commit transaction
=> #<User id: 1, name: "Example User", email: "example@railstutorial.org", created_at: "2017-07-06 09:58:38", updated_at: "2017-07-10 08:26:58", password_digest: "$2a$10$roOAiM8Kr8UyzXazaATKrOQ.SJmh.iH//7izkwyZmJn...", remember_digest: nil, admin: true, activation_digest: "$2a$10$feEfQUyrZKnPlq3VeqvnqOHvXjEa3Mah7TOymTNPhHN...", activated: true, activated_at: "2017-07-06 09:58:38", reset_digest: "$2a$10$tWmnciOSntm2OzU8ItpEw.haF6sbXbwaruxh4v4nH9y...", reset_sent_at: "2017-07-11 05:18:39">

irb(main):036:0> Microposts.find(user.microposts.first)
NameError: uninitialized constant Microposts
        from (irb):36
        from /Users/komei.nomura/dev/sample_app/vendor/bundle/ruby/2.4.0/gems/railties-5.0.3/lib/rails/commands/console.rb:65:in `start'
        from /Users/komei.nomura/dev/sample_app/vendor/bundle/ruby/2.4.0/gems/railties-5.0.3/lib/rails/commands/console_helper.rb:9:in `start'
        from /Users/komei.nomura/dev/sample_app/vendor/bundle/ruby/2.4.0/gems/railties-5.0.3/lib/rails/commands/commands_tasks.rb:78:in `console'
        from /Users/komei.nomura/dev/sample_app/vendor/bundle/ruby/2.4.0/gems/railties-5.0.3/lib/rails/commands/commands_tasks.rb:49:in `run_command!'
        from /Users/komei.nomura/dev/sample_app/vendor/bundle/ruby/2.4.0/gems/railties-5.0.3/lib/rails/commands.rb:18:in `<top (required)>'
        from bin/rails:4:in `require'
        from bin/rails:4:in `<main>'