【未経験プログラミング】Railsのタスクアプリを作成する。【21~3日目】

rails new tasklist --database=mysql  --skip-testrailsプロジェクト作成 

→新規作成とデータベースを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はRailsTaks クラスにコードが無くてもモデル操作できるようになっています。

rails/base.rb at c644e8ba99204a44ea21afbbd877792f6a09ea74 · rails/rails · GitHub

つまりRailsActiveRecordと呼ばれるライブラリを利用することで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  →ステータスカラムが追加された。

 

&gt; は、 > を HTML で表示させるための記号