【未経験プログラミング】Railsのタスクアプリを作成する。【21~3日目】
①rails new tasklist --database=mysql --skip-test でrailsプロジェクト作成
→新規作成とデータベースをmysqlに指定。
②初期化:git init リポジトリのコミットをする。git add . とgit commit -a
git push origin master でプッシュして反映
③ MySQL サーバを起動:sudo service mysqld start
④$ rails s -b $IP -p $PORT でrails serverのpumaが起動される。③が起動してないとエラーが出る。
⑤データベースを作成。 rails db:create
※同じテーブルが作成済み
ActiveRecord::Migration.drop_table(:likes)
コンソールでテーブル削除
Created database 'message-board_development'
Created database 'message-board_test'
※YAML(.yml)ファイル:キー:値のペアで記述される。設定ファイルで利用される。
⑥Modelを作成する :rails g model Tasklist content:string tasklistというモデル作成
作成された:20180912101243_create_tasks はテーブルを管理するファイル
マイグレーションファイルはSQLのCREATE TABLE・・と一緒です。
Railsからデータベースを管理します。テーブル/カラム 作成削除。
⑦rails db:migrate マイグレーションを実行。
⑧describe tasks;でマイグレーション確認できる。
⑨モデルクラスの作成
※app/models/application_record.rbとapp/models/message.rbを確認。
class Task がApplicationRecordを継承して ApplicationRecordをActiveRecord::Baseをさらに継承している事がわかる。(Task<ApplicationRecord)
ActiveRecord::BaseはRailsはTaks クラスにコードが無くてもモデル操作できるようになっています。
rails/base.rb at c644e8ba99204a44ea21afbbd877792f6a09ea74 · rails/rails · GitHub
つまりRailsはActiveRecordと呼ばれるライブラリを利用することでSQLを書く必要なくCRUD操作ができる。
⑩task = Task.new(content: 'kadai') taksにTaskモデルのインスタンスが代入されインスタンスは:#<Task id: nil, content: "kadai", created_at: nil, updated_at: nil> となっている。
⑪task.save セーブ 修正 task = Task.first → taskcontent = '修正したい’
⑫レコードを追加で2個作る合計3個
⑬Git git status diff add . commit -m 'task model'
----------------------------RouterとControllerとViewの関係------------------------------------
Router
は、URLのルーティングを一元管理してるController
は、HTTPリクエストの処理を担っているView
は、HTTPレスポンスとして返されるWebページ
-------------------------------------------------------------------------------------------------------------
⑭config/routes.rbのコード resources :tasks追加する。
Routerの設定:resources:tasks でCRUDの基本7つのルーティンを省略して記載したことになります。
RESTful:(index, show, new, create, edit, update, destroy)
⑮コントローラーを作成 モデル名Sで作成 継承関係はモデル欄確認
HTTPリクエスト
rails g controller Tasks --no-helper --no-assets
⑯コントローラー内とルーティンを同じ名前のメソッド名で定義する。
class TasksController < ApplicationController
def index
end
def show
@task = Task.find(params[:id]) #IDが取得できるように。
end
def new
end
def create
end
def edit
end
def update
end
def destroy
end
end
⑰Viewの作成 HTTPレスポンス
ルーティンの中で必要なViewファイルはgetメソッドだけ、理由はgetメソッド以外はページの表示ではなくリソース操作の為。
app/views/task/index.html.erb
indexアクションに対応するViewを編集。Contorollerから渡されたデータ@tasksを一覧表示させる。
<h1>タスク一覧</h1>
<ul>
<% @tasks.each do |task| %>
<li><%= task.content %></li>
<% end %>
</ul>
Controllerから渡された@taskレコード郡を@task.eachで1つずつtaskとして取り出し<%= task.content %>によってcontentカラム値を表示します。
カラムを増やす
rails g migration AddStatusToTasks status:string
rails db:migrate →ステータスカラムが追加された。
>
は、 >
を HTML で表示させるための記号