Posted at

初心者向けrails generate しないでmodel を作ってみる。

More than 3 years have passed since last update.

仮に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でデータベースに追加したいテーブル、カラムなどの情報を書いていきます。


20160919105130_todos.rb

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を作成。


app/models/todo.rb

class Todo < ApplicationRecord

end

以上!