Rails入門者が知っておくとラクになるツボ

どんもー٩( 'ω' )و
TECH::EXPERT渋谷校68期[@snskOgata](https://twitter.com/snskOgata)です。


12月23日にTECH::EXPERTに入校して早1週間、この期間で周りの生徒さんたちが苦しんでた点、ここがわかると視界が晴れる要素、みたいなものが少し見えたので、Rails入門者の仲間たちに少しでも参考になれば、という記事です。
初めての投稿なのでお手柔らかにお願いします！(笑)


今回の記事の対象者としては、
**参考書などを見ながら簡単なRailsアプリケーションを作ってみたけれど、あんまり理解できていない・・・**
って方におすすめです！

まずは抽象的に結論からいうと
**「全体を俯瞰して」「流れを掴む」こと**
がRails入門者にとって感覚を掴む大きなきっかけになっているように感じています。

# 1.データの流れから見たMVCについて

この部分に関してはあまり躓いていた人は多くないのですが、この流れを踏まえてコーディングとエラー解決をしていくことになるので、サラッとおさらいです。

![スクリーンショット 2019-12-29 17.32.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/558820/2a424079-7e2e-7a07-ff73-4dfc2a04a6c3.png)
大まかな流れとしては、まずユーザがURLにアクセスするとルーティングファイルによってControllerの特定のアクションを呼び出します。
そこで必要であればModelのデータを取得、それを元にページを作成して、結果をユーザに返す、というのが大まかなデータの流れになっています。

# 2.作成に取り掛かる前に把握しておくといい事

### 7つのアクションについて

作成の流れ、に入る前に各アクションについても把握しておきましょう。
Railsでは7つの基本的なアクションを利用して開発することが推奨されています。
index, new, create, show, edit, update, destroyがその7つです。

自分がそうだったんですが、この7つのアクションについての把握が曖昧だと頭がこんがらがってしまってボーッとしてきます(笑)
これはDBを軸に考えると分類しやすいかな？
![スクリーンショット 2019-12-29 20.13.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/558820/0721f11a-3bd0-a036-01e0-3c52444b9cc8.png)
大雑把に説明すると、まずはDBの中身を弄るのはcreate, update, destroyの3種類だけ、ということ。
そしてそのうちcreateするためのフォームを用意するのがnew、updateをするためのフォームを用意するのがeditであるということ。
showとindexに関しては、DBから引っ張ってきたデータを描画しているだけ。
詳細には違ったりする（editはDBからデータを引っ張ってきてそれを使うし、showやindexのビュー内でDBに関与するアクションを呼び出したりもする）んですが、大まかにはこういうものだと理解しておくと、あまり混乱しなくて済むと思います。
逆に、この説明に反しているものは、他のアクション内で少し特殊なことをしていると考え、どの部分がそれを行っているのか探してみるといいでしょう。
自分の場合はnewとcreate、editとupdateがごっちゃになってました\_(:3」∠)\_


# 3.実際に作っていく上での流れ

今回は、例として’tweet’に関するMVCを作成していくていで話していきます。
バージョンはRails5台での記述となっております

##0段階

まずは0段階として、rails g model tweet、rails g controller tweetsなどのコマンドを打って、モデルとコントローラーを生成します。
このときmigrationファイルやmodels/tweet.rbでモデルについての設定を行ったりでき（今回は詳細は割愛します）、
rails db:migrate (古いバージョンの場合は、bundle exec rake db:migrate)コマンドでDBにそれら設定が反映された形になります。

## 各アクションの作成

まずは、newについての作成の流れを見ていきます。

### newアクションの作成

#### ①Routingファイルに追記

```config/routes.rb
resources :tweets, only: :new
```

#### ②Controllerにnewメソッドを追加

```app/controllers/tweets_controller.rb
def new
end
```

#### ③アクション内で使うモデルの用意

```.rb
@tweet = Tweet.new # これを上記関数内につっこむ
```

#### ④ビューを作成

app/views/tweets/ **new** .html.erbを作成し、フォームを用意。
　
 
newアクションの作成はたったのこれだけで完成です！　
続いてcreateアクションについても作成していきます。

### createアクションの作成

#### ①Routingファイルに追記

```config/routes.rb
resources :tweets, only: [:new, :create] # newに加えてcreateもできるように
```
#### ②Controllerにcreateメソッドを追加

```app/controllers/tweets_controller.rb
def create
end
```

#### ③アクション内で使うモデルの用意

```.rb
Tweet.create(params[:tweet]) # これを上記関数内につっこむ ※本当はストロングパラメータの設定が必要
```

#### ④ビューを作成

app/views/tweets/ **create** .html.erbを作成。


これでcreateアクションについても完成！

ここまで書くと勘のいい人は気づいたかもしれませんが、実はいずれのアクションでも
**「ルーティングをして、アクションを宣言して、モデルを用意して、ビューを作成する」だけ** なんです！
ちなみにcreateやdestroyしたあとのページは不要！って場合はビューを作らず別のページにredirectさせてもいいですね:bulb:


# 4.今、自分が何を作ってるのかわからない

Railsで参考書なりを見ながら開発を進めていくと「今 自分がどこの部分の何をやってるのか」がわからなくなっちゃう人が多いみたいです。
かくいう自分も、最初はとりあえず提示されたコマンドを打って、コードをそのまま写すだけで、正直何をしてるのかわからなくなったりしてました(笑)
こういうときに有用なのが **全体を俯瞰して見てみること** です。
![スクリーンショット 2019-12-29 19.22.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/558820/73ed7d7d-3347-f797-c40e-ac557ba78d51.png)


0段階についても、とてもヘビーでかなり端折ってしまってはいますが、このように
**「何に関しての」「どのアクションの」「RMVCのいずれなのか？」**
と分解していくと、自分のやっている部分というのが見えてくる人が多いみたいです。

# 5.エラーの対処について

エラーに対する対処についても書きたいと思っていましたが、書くことって思っていた以上に時間がかかりまくって、これ以上は学習や睡眠に支障が出そうなので、また次回ということで！！
目を通していただきありがとうございました٩( 'ω' )و