Ruby on Rails

【Rails】modelを作成する

結論

rails generateコマンドを使いましょう!

rails g model [model_name]

modelについて

modelは基本的にテーブルに対して紐付きます。

1 テーブルに対して1 modelになります!
(例外もありますが、わかりやすさ重視で)

なので
データベースからのデータの取得、加工などをして
controllerへ指定されたデータを返す
という役割を担っています。

例えば
UsersControllerというcontrollerと
UserModelというmodelがあったとします。

UsersControllerではユーザー作成や、プロフィール表示の機能を実装しています。

このアプリを使用しているユーザーが
マイページから自分のプロフィールを表示させるボタンを押した時
controllerとmodelの間では、このようなやりとりが行われます。

controllerはユーザーからの入力に合わせて
必要なデータを渡してくれるようmodelにアクセスします。

その司令を受け取ってmodelは
データベースから指定されたデータを取得
必要であればデータを使いやすい形に加工してcontrollerへ返します。

modelを作成する

それでは実際にmodelを作成してみます。

Railsでは、controllerやmodelを作成する時に
generationコマンドというコマンドが使えます。

やってみましょう。

rails generate model [model_name]

generateは、gに省略する事も可能です。
[model_name]には、作成したいmodel名が入ります。

今回は、Pokemonという名前のmodelを作成してみます!

$ rails g model pokemon
Running via Spring preloader in process 25359
      invoke  active_record
      create    db/migrate/20200523073350_create_pokemons.rb
      create    app/models/pokemon.rb
      invoke    test_unit
      create      test/models/pokemon_test.rb
      create      test/fixtures/pokemons.yml

作成されましたね!

app/models/pokemon.rbというのが、modelファイルになります。

また、同時に
db/migrate/20200523073350_create_pokemons.rbという
ファイルも作成されていますね!

これはmigrationファイルといって
modelの変更履歴を管理するためのファイルになります。

冒頭に書いているように
modelはデータベースのテーブルに紐づくようになっていますので
migrationファイルを使ってmodelが作成されたことをデータベースに教えてあげる必要があるのです。

次は実際にmigrationファイルを作って
データベースにテーブルを作成したいと思います。

migrationファイルを作成する

ファイルの作成自体はされているので、中身を確認してみます。
こんな感じになっています!

# db/migrate/20200523073350_create_pokemons.rb

class CreatePokemons < ActiveRecord::Migration[5.2]
  def change
    create_table :pokemons do |t|

      t.timestamps
    end
  end
end

create_table :pokemons do |t| ~ endで囲った中に
テーブルのカラムを定義していきます。

t.timestampsは、デフォルトで作成されるタイムスタンプカラムです。
実際には、created_atというカラム名になります。

カラムを定義してみます。

class CreatePokemons < ActiveRecord::Migration[5.2]
  def change
    create_table :pokemons do |t|
      // 追加ここから
      t.string :name
      t.integer :global
      t.integer :type_first
      t.integer :type_second
      // 追加ここまで

      t.timestamps
    end
  end
end

いくつか、カラムを定義してみました。
stringやintegerといったカラムの型と、:nameカラム名を定義しています。

カラムの定義ができましたので、migrationを実行して
データベースに変更をかけてみます。

migrationを実行する

それでは、migrationを実行してみます。

rails db:migrateというコマンドを使用します。
実行すると

$ rails db:migrate
== 20200523073350 CreatePokemons: migrating ===================================
-- create_table(:pokemons)
   -> 0.0006s
== 20200523073350 CreatePokemons: migrated (0.0006s) ==========================

-- create_table(:pokemons)と出ています!
無事にテーブルが作成されましたね!

まとめ

今回は、Railsにおけるmodelの作成方法について解説してみました。

基本的に、新しくmodelを作成する場合には
今回紹介したrails g modelコマンドで
modelファイルとmigrationファイルを作成して
rails db:migrateを使っていく事になるかと思います。

rails g modelには、様々なオプションがつけられたり、
カラムに変更をかけたい場合には、migrationファイルだけ作成して
migrateを実行していくような時もあります。

その場合の方法についても、後々まとめられればと思います。

ピックアップ記事

  1. 【WPテーマ自作】ローカル環境でWP開発ができる「Local」の導入
  2. 【git】git logで変更ファイル名を確認したい!
  3. 【Blender】アニメーションでポーズを左右反転してコピペしたい時
  4. [Rails]findメソッドで連想配列から指定した値を検索する
  5. 【WPテーマ自作】UnderScoresの導入

関連記事

  1. Ruby on Rails

    【Rails】RSpecのお作法メモ

    RSpecを書く機会が増えてきたので、記法の備忘録として記事にします…

  2. Ruby on Rails

    【Rails】ActiveStorageで添付ファイルを削除したいときは、purgeを使う

    動作確認するために、active_storageでアップロードした画…

  3. 【Rails】オブジェクトの中身をログに出力する

    Ruby on Rails

    【Rails】オブジェクトの中身をログに出力する

    オブジェクトの中身をデバッグしたりする時に便利出力結果をみやすい形に…

  4. Ruby on Rails

    [Rails]findメソッドで連想配列から指定した値を検索する

    目次findメソッドとは基本的な使い方selectとの違い連…

  5. Ruby on Rails

    【Rails】railsでIndex name ‘xxx’ on table…

    railsで、dbを変更するためにmigrationを実行した際、in…

  6. Ruby on Rails

    【Rails】development? production? 開発環境ごとに処理を切り分けたい時

    Railsで、開発環境ごとに処理を切り替えたい時の方法を紹介します。ま…

カレンダー

2021年5月
 12
3456789
10111213141516
17181920212223
24252627282930
31  

最近の記事

  1. Ruby on Rails

    【Rails】development? production? 開発環境ごとに処…
  2. Ruby on Rails

    【Rails】RSpecのお作法メモ
  3. 同人イベント

    【C98】夏コミ申し込みました。
  4. 【Rails】オブジェクトの中身をログに出力する

    Ruby on Rails

    【Rails】オブジェクトの中身をログに出力する
  5. その他

    WordPressに移行してみました
PAGE TOP