ぞえの技術めも

Ruby on Rails勉強中

【144日目】【1日20分のRailsチュートリアル】【第11章】Micropostモデルを生成する

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

今日は「第11章 ユーザーのマイクロポスト」から。ようやく第11章…!

第11章 ユーザーのマイクロポスト

全ての準備が整った今、ユーザーが短いメッセージを投稿できるようにするためのリソース「マイクロポスト」を追加していきます。

Twitterみたいなアプリケーションにするそう。

11.1 Micropostモデル

Git をバージョン管理に使っている場合は、いつものようにトピックブランチを作成しておきましょう。

作成しておきましょう。

$ git checkout master
$ git checkout -b user-microposts

11.1.1 基本的なモデル

Micropostモデルは、マイクロポストの内容を保存するcontent属性と、特定のユーザーとマイクロポストを関連付けるuser_id属性の2つの属性だけを持ちます。

基本的な属性はこの2つらしい。

図11.1のモデルでは、マイクロポストの投稿にString型ではなくtext型を使っている点に注目してください。

文字列を扱うにも色んな型があるんだな…。

リスト6.1でUserモデルを生成したときと同様に、Railsのgenerate modelコマンドを使ってMicropostモデルを生成してみます。

Micropostモデルを生成してみました。

$ rails generate model Micropost content:text user:references
      invoke  active_record
      create    db/migrate/20170525023044_create_microposts.rb
      create    app/models/micropost.rb
      invoke    test_unit
      create      test/models/micropost_test.rb
      create      test/fixtures/microposts.yml

このgenerateコマンドはmicropostsテーブルを作成するためのマイグレーションファイルを生成します。

マイグレーションファイル生成されてますね。

user_idとcreated_at両方のカラムを1つの配列に含めることで、Active Recordで両方のキーを同時に使用する複合キーインデックスを作成できます。

うーん、データベースから検索しやすくするため、って感じかな。。。たぶん
下記をマイグレーションファイルに追加することでuser_idとcreated_atカラムにインデックスが付与できる?っぽい。

db/migrate/[timestamp]_create_microposts.rb

    add_index :microposts, [:user_id, :created_at]

マイグレーションしてデータベースを更新。

$ bundle exec rake db:migrate
  :
-- create_table(:microposts)
-- add_index(:microposts, [:user_id, :created_at])
  :

今日の学習時間は【23分】

次は「11.1.2 Micropostのバリデーション」から。