Rails学習　1日目その３

#Ruby on Rails速習実践ガイド　chapter3

##3-1-4　データベースの環境ごとの使い分け
データベースには３種類の環境がある。
それぞれやることに対応してデータベースも割り振られている。

|環境の種類|環境システム名|用途|
|:---|:---|:---|
|開発環境|development|開発時の動作確認を行う|
|テスト環境|test|自動テストを行う|
|本番環境|production|ユーザーが利用可能な形で稼働させる|

開発時はdevelopment環境とtest環境を使っていく。この二つのファイルはdb：createを実行した時に自動的に作成されるようになっている。

## 3-1-5　ビュー層を効率良く書くためにslimを使えるようにする（slimの使い方）
デフォルトではerbで行われているテンプレートエンジンをslimというテンプレートエンジンに変えると簡単にコードを書けるようになる。
>slimの書き方
　

|erbの書き方|slimの書き方|
|:---|:---|
|<% name %>|- name|
|<%= name %>|= name|
|#コメント|/コメント|
|＜p＞ こんにちは　＜/p＞|p こんにちは|
|＜a href='//example.com"＞image＜/a＞|a href="//example.com"image|
|＜div class="profile name"＞|.profile.name|
|＜div id="pam"＞|#pam|

slimは慣れると便利なので慣れるまでは苦労しそうだ。

## 3-2-2 タスクモデルのひな形を作成する
・モデルを作成する
モデルを作成するにはrails g の後に作成したいものを記入する（今回はmodel）

```ruby
$ rails g model Task name:string description:text
```
こうすることで
・Taskモデルができる
・name:string description:textのテーブルを作成できる設計図のマイグレーションファイルができる
・モデルの自動テスト用のファイルができる

テーブルを作るにはマイグレーションファイルをdb:migrateをするとテーブルが作られる。

## 3-3　コントローラーとビュー
・ルーティング
ルーティングはURLとHTTPメソッドを見てコントローラーの各アクションに割り振る。

|URLの例|HTTPメソッド|アクション名|機能名|役割|
|:---|:---|:---|:---|:---|
|/tasks|GET|index|一覧表示|全タスクを表示する|
|/tasks/17|GET|show|詳細表示|特定のidのタスクを表示する|
|/tasks/new|GET|new|新規登録画面|新規登録画面を表示する|
|/tasks|POST|create|登録|登録処理を行う|
|/tasks/17/edit|GET|edit|編集画面|編集画面を表示する|
|/tasks/17|PATCH,PUT|update|更新|更新処理を行う|
|/tasks/17|DELETE|destory|削除|削除処理を行う|

HTTPメソッドは重要！！


・ルーティングを1つにまとめる方法

```ruby
get 'tasks/index'
get 'tasks/show'
get 'tasks/new'
get 'tasks/edit'
```
上のルーティングをresourcesを使ってまとめる

```ruby
resource :tasks
```

resourcesメソッドはindex,show,new,create,edit,update,destroyの7つのアクションを一つにまとめることができる

```ruby
get "/" => "tasks#index"

root to: 'tasks#index'
```
またrailsの初期画面もroot toで指定するとそのアクションに連携したビューが初期画面になる。


・URLヘルパーメソッド
/tasks/newや/tasks/editなどもヘルパーメソッドに置き換えることができる

|URLの例|HTTPメソッド|URLパターン名|URLヘルパーメソッド|
|:---|:---|:---|:---|
|/tasks|GET|tasks|tasks_path|
|/tasks/17|GET|task|task_path|
|/tasks/new|GET|new_task|new_task_path|
|/tasks|POST|tasks|tasks_path|
|/tasks/17/edit|GET|edit_task|edit_task_path|
|/tasks/17|PATCH、PUT|task|task_path|
|/tasks/17|DELETE|task|task_path|

##3-3-1-5　新規登録画面のビューを実装する

新規登録画面

```ruby:app/views/tasks/new.html.slim
h1 タスクの新規登録

.nav.justify-content-end
  = link_to '一覧', tasks_path, class: 'nav-link'

=form_with model:@task,local:true do |f|
  .form-group
    =f.label :name 
    =f.text_field :name, class: 'form-control', id: 'task_name'

  .form-group
    =f.label :name 
    =f.text_area :description, rows: 5, class: 'form-control', id: 'task_description'
  =f.submit nil, class: 'btn btn-primary'
```

form_withはフォームを作成するためのもの。フォームで必要なものをf.を使って記入していく。
・解説
.nav.justify-content-end：Bootstrapで用意されたコード
f.label :name ：入力欄に対応するラベルを表示本来はnameだが日本語翻訳されているので名称という名前になる
=f.text_field :name：テキストを入れる場所
class: 'form-control：bootstrapに元々ついているクラス

##3-3-1-6　登録アクションを実装する

```ruby:app/controllers/tasks_controller.rb
def create
   task = Task.new(task_params)
   task.save!
   redirect_to tasks_url, notice: "タスク「#{task.name}」を登録しました"
end



private

def task_params
   params.require(:task).permit(:name,:description)
end
```
require(:task).permit(:name,:description)は「nameとdiscriptionの情報だけ許可して新しくtaskを作ります」という意味。paramsでその作ったパラメーターを取得する。

##3-3-3　詳細表示機能を実装する

tasks/[タスクのid]はURLヘルパーメソッドを用いるとtask_path(task)と表すことができる。idはrailsの方で引数taskから自動的に判定されるようになっている。

##3-3-3-2 詳細画面にタスクの属性情報を表示する

```ruby
simple_format(h(@task.description),{},sanitize: false, wrapper_tag: "div")
```

descriptionのように説明が入る文章は長くなり改行する必要が出てくる。simple_formatを用いることで簡単に改行が行われる。