意識低いRuby on Rails再入門2
2015/07/03
Modelを作り、コンソール上からデータを追加した。
次はこのデータをlocalhost:3000にアクセスしたときに表示させてみたい。
Controllerを追加する
Ruby on RailsではMVCフレームワークを採用している。
CであるControllerは、サーバに来たアクセスの内容を適切な処理部隊に移譲したり、アクセスを処理するために必要なModelやViewを呼び出して適当なレスポンスをクライアントに返す。いわば調整役である。
Modelを作成したときと同様にgenerateコマンドでControllerを作る。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
anal% bundle exec rails g controller Items index create app/controllers/items_controller.rb route get 'items/index' invoke erb create app/views/items create app/views/items/index.html.erb invoke test_unit create test/controllers/items_controller_test.rb invoke helper create app/helpers/items_helper.rb invoke test_unit invoke assets invoke coffee create app/assets/javascripts/items.coffee invoke scss create app/assets/stylesheets/items.scss |
これでItemクラスのControllerができたindexはItemクラスの一覧を取得するルートを示している。
他にもItemクラス単品を表示するためのshowやItemクラスを追加するcreateなんかも指定できる。
Controllerが作成できたらrails s
コマンドでアプリを起動し、localhost:3000/items/indexにアクセスしてみる。
1 2 3 |
Items#index Find me in app/views/items/index.html.erb |
こんな感じのテキストが表示されたらOK
このindex.html.erbというファイルがViewに該当する。
このファイル内でItemクラスの中身を描画するように編集してゆけばよさそう。
というわけで、実際にItemクラスの情報を表示させてみたい。
その前にerbからslimに移行したい。
http://qiita.com/moriyaman/items/c0d60406422677bcb398
ここを参考に移行する。
index.html.slimを次のように書き換える
1 2 3 4 5 |
h1 | Items#index - @items.each do |item| .item = item.title |
@itemsというリストをeachで回しつつtitleを表示してる。
localhost:3000/items/indexにアクセスするとエラー画面が表示されるはず。
ControllerからViewに対して@itemsを渡してないからだ。
なので、items_controller.rbのindexメソッドで@itemsを定義する。
1 2 3 4 5 |
class ItemsController < ApplicationController def index @items = Item.all end end |
どのViewを使うか指定しなくても良いのか?という疑問を抱く。
RailsはViewの指定が無ければ勝手にそれらしいViewを選択して使うようになっている。
items_controllerはItemクラスのControllerなので、views/items/フォルダ以下のViewファイルを探す。
Controllerのindexメソッドを呼び出した場合にviews/items/index.html.slimというファイルが存在すれば、このファイルを使ってViewをレンダリングする。
Modelの内容を表示するウェブアプリが完成した。
ネクストアクション(雑談)
このウェブアプリの方向どうしてゆくかによって、次にすべきアクションは変わってくる。
見た目やアニメーション、インタラクティブ性を付加したいのであれば、CSSやJS寄りのを実装を進めていくだろう。
100万件のItemを一瞬で表示したいとなれば、DBのチューニングやら、キャッシュサーバの設置が必要になるだろう。
Itemを投稿する画面が欲しいとなれば、投稿画面のViewや投稿処理を担うメソッドをControllerに追加する必要があるだろう。
機能追加という大きなタスクをレイヤーごとに細かく分解して、小さなタスクに落としこむと良いと思ってる。
○○したい、という欲望だけ掲げても、じゃあ実際に何をしていいか分からないという状況に陥りやすい。
もちろん、プログラミングセンスがある人は○○したいだけで平然とモノを作れるだろう。
ただ、自分のような凡人だと考えなければいけない範囲が多すぎて、TODOが整理されず悶々して時間を費やすことになる。
繰り返しになるが、○○をするためには何が必要なのか、Modelを追加しないといけないのか、CSSを書き換えないといけないのか、という具体的な要素に分解しようとすることが大事。
そうすると、分かるものと分からないものの境界が見えてくるので、その境界を分かる側に推し進めていけば良い。
この境界を見つけることが効率よく技術を習得してゆくコツかなと思ってる。
適当にググってstackoverflowとかのtipsをコピペして、なんとか動かす。って技術も大事だけどw
336px
336px
関連記事
- PREV
- 意識低いRuby on Rails再入門1
- NEXT
- 意識低いRuby on Rails再入門3