2章ではToyアプリケーションという、おもちゃアプリケーションを作成しながらRailsの勉強をしていきます。
scaffoldジェネレータとは
Railsにはscaffoldジェネレータというスクリプトが搭載されており、大量の機能を自動的に生成することができるようです。
この機能を用いて、Railsアプリの構造と、Railsで推奨される RESTアーキテクチャ について学ぶ章になっています。
ルーティングについて
過去の記事でもとりあげていますが、今回scaffoldで作成することにより、新規ユーザ登録やユーザ一覧などのページが自動的に追加されます。
railsチュートリアルの2.2.1にある図は、下記コマンドで把握することが可能です。
$ rails routes Prefix Verb URI Pattern Controller#Action users GET /users(.:format) users#index POST /users(.:format) users#create new_user GET /users/new(.:format) users#new edit_user GET /users/:id/edit(.:format) users#edit user GET /users/:id(.:format) users#show PATCH /users/:id(.:format) users#update PUT /users/:id(.:format) users#update DELETE /users/:id(.:format) users#destroy root GET / application#hello
railsチュートリアル2.3.3の演習1
この演習問題の解答がチュートリアルには載っていない?ため、現時点で私が思いついた解答を載せておきます。
(もし間違っていたら指摘していただけると大変嬉しいです)
ユーザーのshowページを編集し、ユーザーの最初のマイクロポストを表示してみましょう。同ファイル内の他のコードから文法を推測してみてください (コラム 1.1で紹介した技術の出番です)。うまく表示できたかどうか、/users/1 にアクセスして確認してみましょう。
toy_app/app/controllers/users_controller.rb
~~~ def show @micropost = Micropost.find(params[:id]) #追加 end ~~~
toy_app/app/views/users/show.html.erb
~~ <p> <strong>Email:</strong> <%= @user.email %> </p> <!-- 追加開始 --> <p> <strong>最初の投稿:</strong> <%= @micropost.content %> </p> <!-- 追加終了 --> <%= link_to 'Edit', edit_user_path(@user) %> | ~~
現時点での疑問点
- コントローラー(user_controller.rb)のeditメソッドには@user変数が存在しないが、ビュー(edit.html.erb)で@user変数が使用できるのはなぜか。
→上記、なんとなく理由がわかりました。 toy_app/app/controllers/users_controller.rb
~~~ before_action :set_user, only: [:show, :edit, :update, :destroy] ~~~ private # Use callbacks to share common setup or constraints between actions. def set_user @user = User.find(params[:id]) end # Never trust parameters from the scary internet, only allow the white list through. def user_params params.require(:user).permit(:name, :email) end ~~~
このbefore_acrionによって、定義されている各アクションの実行前に
@user = User.find(params[:id])
が実行されているからのようです。
まとめ
この章ではScaffoldという機能を中心に、Rrailsの構成を理解しようとしてきました。
しかし、Scaffold機能ではコードの中身を理解するのも難しく(現段階では)、これを元にRailsを細部まで理解するのは難しいと感じました。
しかし、1章に比べ、より本格的なアプリケーションを作成できたのは間違いないと思います。
特にデータベースにデータを入れたり、データベースから値を取得したりなど、いかにもWEBアプリっぽくて、楽しかったです。
例のごとく2章のソースコードを置いておきますので、よければ参考になさってください。