【Rails】コマンドの基本的な流れ

<h1>本投稿の目的</h1>
Railsの操作をメモするために議事録として書いていきます。
以前書いた[Rubyの復習1](https://qiita.com/naoto911/items/f46b35f84cc80f59cac3),[Rubyの復習2](https://qiita.com/naoto911/items/3528067588e6884a80ba)のRails編です。

---
<h1>学習に使った教材</h1>
Udemyの ["はじめてのRuby on Rails入門-RubyとRailsを基礎から学びWebアプリケーションをネットに公開しよう"](https://www.udemy.com/course/the-ultimate-ruby-on-rails-bootcamp/) を教材として使用しました。

---

<h1>Railsでの操作の流れ</h1>
以下の流れでproduct制作を進めていく
①新規プロジェクト作成
②dbの作成
③controllerとviewの作成
④modelとcolumn情報の作成
⑤dbへtableを作成
⑥dbの編集
⑦controllerの操作

---
<h3>①新規プロジェクト作成</h3>
~~~
rails _x.x.x_ new プロジェクト名
~~~

・新規railsプロジェクトを作成する

**【解説】**
○rails _x.x.x_ new
⇨決まった記法
⇨_x.x.x_ でversion を指定する

**【x.x.yになってしまう場合】**
・2桁目までのxはここで指定でいるが,3桁目のxが指定通りにならないことがある
・これはRailsが最新の安定verを推奨してgenerate実行するため
・この場合は別途Gemfileを書き換えてbundle updateを実施　

○プロジェクト名
⇨自分で名称を設定してOK

---
<h3>②db領域の確保</h3>
~~~
rails db: create
~~~
・dbという空間を作成する
・このコマンドだけではtableは作成されてない
・これを実行しないと後で ⑤dbへtabelを作成,⑥dbの編集 が実行できないはず

---
<h3>③controllerとviewの作成</h3>
~~~
rails g controller コントローラー名(複数形) アクション名
~~~
・"controller"と"view"を生成
・view = htmlファイル と置き換えてOK

**【解説】**
○rails g model　
⇨決まった記法

○コントローラー名
⇨コントローラー名はモデル名と揃える *(コントローラー名=複数系,モデル名=単数系)
⇨複数形で記述しないとroutingエラーになる

○アクション名
⇨複数羅列して書くことが可能
⇨アクションは,controllerから後で追加も可能

**【アクションとは?】**
・rubyでいうメソッドのこと
・ただし,urlへのアクセスをトリガーに自動で実行されるメソッドのこと

**【作成されるファイル】**
①controllerファイル
・app/controller/コントローラー名_controller.rb として生成される
・def アクション名 (①のcontroller内に生成)も自動で記述される

②viewディレクトリとviewファイル
・ここでの注意点は,viewはディレクトリとファイルの2つが生成されることに注意
・app/views/コントローラー名 というディレクトリが生成
・アクション名.html.erb というファイルが生成 (このディレクトリの中に生成)
・アクションを複数羅列しつ場合,その複数個分だけviewファイルが生成される (ディレクトリは一つ)

---
<h3>④modelとcolumn情報の作成</h3>
~~~
rails g model モデル名(単数形) column情報
~~~
・"migraionファイル"と"model定義ファイル" を生成
・ここで,model = class と置き換えてOK
・modelのcolumn情報もここで明記可能

**【解説】**
○rails g model　
⇨決まった記法

○モデル名
・ターミナル では小文字でよい
・実際のモデルは1文字目は大文

○columon情報
⇨column名称:データ型 の順で作成

**【作成されるファイル】**
①migrationファイル
・db/migrate の中に生成される
・timestamp  + create_モデル名.rb  というファイル名
・データベース(db)のテーブル構造の編集ができる
・dbへ値の格納はしない
・演習ではノータッチだがここでcolumn追加編集も多分可能
・class名は 'Createモデル名s'

②modelファイル
・app/models の中に生成
・モデル名.rb というファイル名　
・モデルクラスを定義したファイル

**【ポイント】**
・modelで作成したcolumnはcontrollerでインスタンス変数として使用可能

---
<h3>⑤dbへtableを作成</h3>
~~~
rails db:migrate
~~~
・これはただの実行処理で入力するだけ
・migrationで定義した指示をdbへtableとして反映させるための入力処理

---

<h3>⑥db編集</h3>
~~~
rails console
~~~
・ここで初めてdbに値を格納,編集,削除できる
・この演習では rails console でやった
・実際はviewから実行可能になるはず

**【rails consoleとは?】**

db処理について対話型でrails のコードを確認できる環境

**【rails consoleのコマンドについて(登録編)】**


rails console (rails c でも可能) 実行後に

~~~
○モデル名.all
⇨ モデルの中身を確認可能 (自動でsqlの操作を実行してくれる)

○変数 = モデル名.new
⇨ インスタンス生成

○変数.column名 = 値
⇨ columnに指定した値を格納

○変数.save
⇨ インスタンス生成後の内容をデーターベスに反映

○モデル名.find(n)
⇨ db内のn個目のインスタンスの情報を出力 (id=nとなるデータを探しにいく)

○変数 = モデル名(column名1: '値1' ,column名2: '値2' )
 変数.save
⇨ 上記を1行で記述する方法
~~~

**【rails consoleのコマンドについて(編集編)】**

~~~
○変数 = モデル名.find(n)
○変数.column名 = 値
⇨変数は変更前の変数と同じでも問題ない
⇨値のところを変更前後で変えて上書き準備

○変数.save
⇨これで上書き処理が完了
~~~

**【rails consoleのコマンドについて(削除編)】**

~~~
<変数に格納後に実行する場合>
○変数 = モデル名.find(n)
○変数.destroy 

<変数に格納前に実行する場合>
○モデル名.find(n) 
~~~
---
<h3>⑦controllerの操作</h3>

**【できること】**
・urlの流れをコントロール
・db ⇆ view での値の共有

**【railsの規約で事前設定済の処理】**
・デフォルトでアクションが記載されている (def index)
・このアクションが実行されると,指定済のurlへアクセスしてくれる
・これらのうち "アクション作成" "urlの設定" はrailsの規約が事前設定済み

**【人が実施する処理】**
・モデル値を格納 (イメージはclassのインスタンス作成)
・これで,インスタンス変数が使用可能に (@usersなど)
・このインスタンス変数は,viewでも使用可能
・viewにインスタンス変数経由で値を表示可能に

**【viewで使用する方法】**
・配列として@usersに格納
・view内で,each do を使う
・これによって,1つずつcolumn情報をviewで出力可能 (userに格納)

**【ポイント】**
・controller で定義したインタンス変数は,viewで使用可能

**【Controllerのコード】**

```ruby:qiita.rb
class UsersController < ApplicationController
  def index
    @users = User.all
  end
end
```
**【viewのコード】**

```ruby:qiita.html.erb
<ul>
    <% @users.each do |user| %>
        <li><%= user.id %>,<%= user.name %>,<%= user.age %></li>
    <% end %>
</ul>
```
**【出力結果】**

~~~
1.naoto,24
2.naopiyo,20
3.kanopyo,27
~~~

dbの値を表示できる


---