0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

(Rails)モデル作成〜マイグレーションファイルの実行まで

Last updated at Posted at 2022-02-06

Railsにおけるモデル作成〜マイグレーションファイルの実行までをちゃちゃっと箇条書きで記していきます。

Railsプロジェクトを作成してからの基本の流れになるので、できれば指が覚えるところまで行きたいです(笑)


①モデルを作る
例:movieモデルを作る場合

$ rails g model movie

もし間違えて作成した場合は

$ rails d model movie

で削除して再度作り直します。

↓成功すると以下のように表示されます

  invoke  active_record
  create    db/migrate/20220130060030_create_movies.rb
  create    app/models/movie.rb

これでモデルが作成できました。

次にマイグレーションファイルです。

②マイグレーションファイルを編集する

モデルを作成したときにマイグレーションファイルも一緒に作成されます。

create db/migrate/20220130060030_create_movies.rb
マイグレーションファイルとは、テーブルの中身のカラムを作成するファイルです。

db/migrate/20220130060030_create_movies.rbを開いてみると下記のように書かれています。

class CreateMovies < ActiveRecord::Migration[6.1]
  def change
    create_table :movies do |t|
      
      t.timestamps
    end
  end
end

上のままのコードだとテーブルの中にはレコードが作成された日時を保存するためのcreated_atというカラムとレコードが上書きされた日時を保存するためのupdated_atというカラムしか作成されません。
※「t.timestamps」の記述により作成されます

カラムを作成するにはマイグレーションファイル内に下記の記述をします。

class CreateMovies < ActiveRecord::Migration[6.1]
  def change
    create_table :movies do |t|
      t.カラムの型  :カラム名
      t.timestamps
    end
  end
end

カラムの型というのはどういう状態でデータを保存するかという指定です。
文字として保存するのか数値として保存するのかといったような指定をすることができます。

カラムに指定できる型は、よく使われるものとして次のようなものがあります。

string型
255文字までの文字を保存したいときに指定します。
名前やemailアドレスなど、255文字以上にならないときはstring型を使います。

text型
255文字以上になることが予想されるときに指定します。
string型より読み込む際時間がかかるので、明らかに255文字以内で収まることが予想できるのであればstring型を使います。

integer型
整数として保存したいときに指定します。
-2,147,483,648から+2,147,483,647の整数を保存できます。
基本的に整数として保存したい場合はinteger型にしておくのが良いです。

datetime型
日時を保存したいときに指定します。
「2001-01-01 01:01:00」の形で保存されます。

references型
外部キーを追加するときに指定します。
例えばt.references :userと指定するとuser_idというカラムが追加されます。
ただしこれだけでは外部キー制約がつかないので下記のようにforeign_key: trueを記述します。

t.references :user, foreign_key: true

それでは実際にカラムを書き足していきます。今回moviesテーブルに足すのは以下の通りです。

title(タイトル)
image(画像)
released_year(公開年)
country(作成国)
screening_time(上映時間)
review(レビュー)
synposis(あらすじ)

titleカラムはタイトルを保存します。
タイトルは文字として保存するのでstring型かtext型になりまが、映画のタイトルはまず255文字以上にはならないのでstring型にします。

reviewカラムも文字として保存しますが、255文字以上になることも考えられるのでtext型で作成することにします。

imageカラムは一般的にstringで作成します。

それらを踏まえた結果、今回のマイグレーションファイルの記述は下記のようになります。

class CreateMovies < ActiveRecord::Migration[6.1]
  def change
    create_table :movies do |t|
      t.string      :title
      t.string      :image
      t.string      :released_year
      t.string      :country
      t.string      :screening_time
      t.text        :review
      t.text        :synposis
      
      t.timestamps
    end
  end
end

③マイグレーションファイルを実行する マイグレーションファイル内にカラムを記載しただけでは、データベースには反映されていません。これをデータベースに反映させるために、以下のコマンドを打ってマイグレーションファイルを実行する必要があります。
$ rails db:migrate

※ rails4までは「rake」コマンド
マイグレーションファイルを実行したら、中に記載したカラム情報がデータベースに反映されます。


あとがき…
今回はモデルを作成した際に作られるマイグレーションファイルに対する記述でした。では、今作成したmoviesテーブルに新たにカラムを追加したい場合はどうすれば良いのかというと、新たにマイグレーションファイルを作成する必要があります。データベースを編集したい場合は全てマイグレーションファイルから行います。

その部分についてはこれ以上は長くなるので他の記事で書いていきます。
※記事ができたらリンクを記載します。

 参考記事
https://qiita.com/daisuke19840125/items/b052292c51eb7e537231
https://pikawaka.com/rails/migration

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?