仮にtodoリストのモデルを作ることにします。
title:string | body:text | priority:integer |
---|
こんな感じのカラムを持つtodoテーブルをrailsでgenerateコマンドを使わずに作っていきます。
generateコマンドを使うと
rails g model todo title body:text priority:integer
invoke active_record
create db/migrate/20160917065918_create_todos.rb
create app/models/todo.rb
invoke test_unit
create test/models/todo_test.rb
create test/fixtures/todos.yml
では、これからgenerateを使わずにモデルを作っていきたいと思います。
マイグレーションファイルから作っていきます。
rails g migration todos
invoke active_record
create db/migrate/20160919105130_todos.rb
参考 http://qiita.com/zaru/items/cde2c46b6126867a1a64
マイグレーションとは
通常テーブルを新規に作成するには必要なSQL文を直接実行して作成します。カラムを追加したりする場合も同じです。それに対してマイグレーションを使う場合はテーブルを新規に作成するためのマイグレーションスクリプトと呼ばれるスクリプトファイルを作成し実行します。後からカラムを追加したい場合には、カラムを追加するための別のスクリプトファイルを作成し実行します。
スクリプトファイルはRailsで決められた文法で記述するのですが、使用しているデータベースがMySQLであってもSQLiteであっても同じ記述が対応できます。またスクリプトファイルは作成された順に残っていますので、最初のものから順に実行することでまったく同じテーブルを簡単に作成できます。
引用 http://www.rubylife.jp/rails/model/index5.html
先程作成したマイグレーションファイルにrubyでデータベースに追加したいテーブル、カラムなどの情報を書いていきます。
class Todos < ActiveRecord::Migration[5.0]
def change
create_table :todos do |t|
t.string :title, null: false
t.text :body, null: false
t.integer :priority, null: false, limit: 7
end
end
end
railsのcreate_tableメソッドを使ってテーブルを作成。
rake db:migrateをすると...
➜ todo_app git:(master) rake db:migrate:reset
Dropped database 'todo_sample'
Database 'todo_sample' does not exist
Created database 'todo_sample'
Database 'todo_sample' already exists
== 20160919105130 Todos: migrating ============================================
-- create_table(:todos)
-> 0.0154s
== 20160919105130 Todos: migrated (0.0155s) ===================================
無事テーブルが作成されました。
次にtodo.rbを作成。
class Todo < ApplicationRecord
end
以上!