結論
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を実行していくような時もあります。
その場合の方法についても、後々まとめられればと思います。