ぞえの技術めも

Ruby on Rails勉強中

【42日目】【1日20分のRailsチュートリアル】【第6章】ユーザーオブジェクトを作成

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

今日は「6.1.2 modelファイル」から。

6.1.2 modelファイル

生成したUserモデルのコード確認。
ActiveRecord::Baseクラスを継承している。

app/models/user.rb

class User < ActiveRecord::Base
end

6.1.3 ユーザーオブジェクトを作成する

データベースを変更しないためにサンドボックスモードとやらでコンソールを起動。

$ rails console --sandbox
Loading development environment in sandbox (Rails 4.2.2)
Any modifications you make will be rolled back on exit
>> 

コンソールで加えた変更はコンソール終了時にロールバックしてくれるらしい。

>> User.new
=> #<User id: nil, name: nil, email: nil, created_at: nil, updated_at: nil>

引数なしのUser.newは各属性がnilで生成される。

>> 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>

引数にnameとか指定すれば値が入った状態でUserオブジェクトが生成される。 created_atとかは勝手に作成日が入るわけじゃないのかー。

>> user.save
   (0.1ms)  SAVEPOINT active_record_1
  SQL (0.4ms)  INSERT INTO "users" ("name", "email", "created_at", "updated_at") VALUES (?, ?, ?, ?)  [["name", "Michael Hartl"], ["email", "mhartl@example.com"], ["created_at", "2016-09-21 03:12:53.424712"], ["updated_at", "2016-09-21 03:12:53.424712"]]
   (0.1ms)  RELEASE SAVEPOINT active_record_1
=> true

と思ってたらデータベースに保存するときに値が入るらしい。
Active Recordを使う上では気にしなくて良さそうかな?

作成した時点でのユーザーオブジェクトは、id属性、マジックカラムであるcreated_at属性とupdated_at属性の値がいずれもnilであったことを思い出してください。saveメソッドを実行した後に何が変更されたのかを確認してみましょう。
idには1という値が代入され、一方でマジックカラムには現在の日時が代入されているのがわかります。

チュートリアルでも言及されてた。
idと作成日/更新日はわざわざ指定する必要はないんだね。

destroyはデータベースからレコードを削除するっぽい。

>> foo = User.create(name: "Foo", email: "foo@bar.com")]
   (0.1ms)  SAVEPOINT active_record_1
  SQL (0.6ms)  INSERT INTO "users" ("name", "email", "created_at", "updated_at") VALUES (?, ?, ?, ?)  [["name", "Foo"], ["email", "foo@bar.com"], ["created_at", "2016-09-21 03:32:40.187698"], ["updated_at", "2016-09-21 03:32:40.187698"]]
   (0.1ms)  RELEASE SAVEPOINT active_record_1
=> #<User id: 2, name: "Foo", email: "foo@bar.com", created_at: "2016-09-21 03:32:40", updated_at: "2016-09-21 03:32:40">
>> foo.destroy
   (0.1ms)  SAVEPOINT active_record_1
  SQL (0.1ms)  DELETE FROM "users" WHERE "users"."id" = ?  [["id", 2]]
   (0.1ms)  RELEASE SAVEPOINT active_record_1

SQLの方が馴染みがあるのでSQLも見つつ理解かな。。。

今日の作業時間は【23分】

次は「6.1.4 ユーザーオブジェクトを検索する」から。