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. 【Rails】railsでIndex name ‘xxx’…
  2. 【Rails】development? production? 開発環境ごとに処…
  3. 【MySQL】mysqlで新しくユーザーを追加する
  4. 【Blender】複数バージョンを簡単に管理できる、BlenderLaunche…
  5. 【Blender】Bumpを使用した質感表現の方法

関連記事

 
  1. Ruby on Rails

    【Rails】レコードが保存済みか確認するpresisted?メソッド

    レコードが保存されているかどうかでUIの表示を切り替えたり、保存されて…

  2. railsをproductionモードで実行する

    Ruby on Rails

    【Rails】railsをproductionモードで実行する

    結論--environmentオプションを使用します。…

  3. Ruby on Rails

    【Rails】文字列からHTMLタグを取り除く方法

    Railsで、HTMLタグを取り除いて文字列を出力したい時があります。…

  4. Ruby on Rails

    【Rails】selectメソッドで特定の条件を満たす要素を取得する

    selectは、配列に対してブロック内の条件を評価し、真になって要素を…

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

    Ruby on Rails

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

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

  6. Ruby on Rails

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

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

カレンダー

2021年8月
 1
2345678
9101112131415
16171819202122
23242526272829
3031  

最近の記事

  1. WordPress

    【WPテーマ自作】UnderScoresの導入
  2. Blenderの複数バージョンを簡単に管理できるBlenderLauncherの使い方

    Blender

    【Blender】複数バージョンを簡単に管理できる、BlenderLaunche…
  3. Ruby on Rails

    【Rails】modelを作成する
  4. Ruby on Rails

    【Rails】railsでIndex name ‘xxx’…
  5. 【Rails】オブジェクトの中身をログに出力する

    Ruby on Rails

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