Help us understand the problem. What is going on with this article?

Rails初心者はscaffoldとresourcesを使うな

はじめに

この記事はRuby on RailsやWebフレームワークの勉強を始めた人を対象にしており
別にRailsやscaffoldとresourcesをディスる目的じゃなく
自分がRailsをはじめて触ったときに躓いた経験を元にした内容

まずscaffoldとresourcesとは

scaffold

Railsに用意されているジェネレータの1つで「足場」を意味する
最低限のCRUDを自動で生成してくれる便利な機能
コマンド1つで、コントローラー、モデル、ビュー、ルーティングを全て用意してくれる
コマンドとしては

$ rails g scaffold モデル名 カラム名:型

出来るビューはこんな感じ

/モデル名s/index
スクリーンショット 2017-08-03 17.51.44.png

/モデル名s/new

スクリーンショット 2017-08-03 17.58.20.png

resources

/config/routes.rbに記述するルーティングでresourceを用いると
こちらも自動でCRUDを用意してくれる
記述の仕方としては

resources :リソース名

1つのresourcesで以下のルーティングを全て用意してくれる
スクリーンショット 2017-08-03 18.07.25.png

正直開発をする時に使うとめっちゃ便利だったりする
だが、しかし
便利すぎるがゆえにMVCやHTTPメソッドをまだ理解してない初心者が
いきなりこの2つを使おうとするとフレームワーク内での動きを把握できず躓いてしまうとこが多々あるっぽい(経験談)

躓くところ

scaffold

まずは、scaffoldを使って躓くところ
上記したとおりMVC、ルーティングの全てをコマンド1つで用意してくれる
実際に

$ rails g scaffold myapp name:string age:integer

を実行すると
app/controllers/myapps_controller.rb
app/models/myapp.rb
app/views/
|- _form.html.erb
|- _myapp.json.jbuilder
|- edit.html.erb
|- index.html.erb
|- index.json.jbuilder
|- new.html.erb
|- show.html.erb
|- show.json.jbuilder
が生成される。
でもこれが以外と初見殺し
本人が意識していないところで自動生成されてしまうため
MVCをまだ理解していない人だと
「モデル?なにそれ?コントローラー?そんなもの作った覚えないよ??そもそも何なのそれ??」
と言う事態に陥ってしまい理解できずに苦しむ事になったりする。

resources

resourcesもscaffoldと同じで最低限のCRUDへのパスを自動で通してくれる
すなわち、フレームワーク初心者でHTTPメソッドをまだ理解していない人が触ると
「POST???ああ、手紙入れるやつね。GET??ポケモン??」

「アクション?なにそれ美味しいの?」
なんてことになるのは必然である

解決策?

この問題への解決策としては
理解できるまでは面倒くさくても1つ1つ手動で作る
だと思う。
モデルやコントローラーの作成も1つ1つコマンドで

$ rails g model モデル名 カラム名:型
$ rails g controller コントローラー名

の様に作っていく
ルーティングも

get 'ルーティング/パス' => 'コントローラー#アクション'
post 'ルーティング/パス' => 'コントローラー#アクション'

の様に手書きで作っていくのがいいと思う。

最後に

自分が初めてRailsを触ったときのことを思い出しながら書きました
もしこれからRailsを使ってみようという方、
他の人にRailsの使い方を教えようとしてる方の助けになれば幸いです。

ではよきRailsライフを

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away