よちよち.rb 第12回 #yochiyochirb
はろー銀座!
大人の街、銀座でよちよちしました。
渋谷でお世話になっている電源カフェbeezさんが銀座にもありました。
学んだこと
Railsチュートリアルの「2.2.2 MVCの挙動」からグループワーク形式ですすめました。
私のいたグループは、図2.11とその下にある説明1〜8を"読み砕いた"40分でした。
言いかえてみることの大切さ
他の部分でもあてはまる話なんですが、「目で読む」のと「声に出して読む」のと「それを自分の言葉で言いかえてみる」のはまったく違う!!
1〜8についても、よちよちが始まる前に自分で「目で読んで」、グループワークで「声に出して読んで」みたんですが、
そのあと「自分の言葉で言いかえて」みたら、
わかると思っていたところがわかっていなかったり、
他の疑問が浮かんできたりして、
結果ものすごく内容が濃くなりました。
マッピング、ルーティング、ディスパッチ
声に出してみたら、マッピングとルーティングの違いについて「?」となりました。
ふんわりはわかる気がするけど、言葉で説明するとなると…とみんなで話し合いました。
index create edit delete などをアクションしよう〜と決めるのがマッピングで、
それらをどのように結びつけるか、道筋を決めていくのがルーティング、
というように理解しました。
違っていたらご指摘ください。
ちなみにRailsのドキュメントにみるルーティング
(最近、ドキュメントを見るように癖をつけています)
ディスパッチっていうのは聞き慣れない言葉だったのですが、
「送信する」とか「派遣する」とか割り当てるとか振り分けるとかそういう雰囲気。
ハッシュとシンボル
チュートリアルには
(:usersという一見奇妙な記法は、シンボルと呼ばれるものです。詳細については4.3.3で説明します。)
とあって、後々で大丈夫?と言いつつも、たまに見かける「:」ってなんかすごい混乱する、っていう話になりました。
key: :val
とかちょっと。。
ということでハッシュとシンボルの話になり、↑のような書き方になったのはRuby1.9からで、
:key => :val
が元になっているんだよって教わりました。スッキリ!
そして「ハッシュとは辞書である」(マツ先生 @upinetree より)という名言を頂戴しました。
$ dictionary = { :hello => 'こんにちは', :good => 'よい' } => {:hello=>"こんにちは", :good=>"よい"} $ dictionary[:good] => "よい"
これすごいわかりやすくてよかったです。ありがとうございました!!
resouces を書きかえてみた
config/routes.rb に `resources :users` って書くだけでいい感じにルーティングされちゃって、
Rails様すげーなぁ!という話になって、
ふと先日、写経しているなかでルーティングについて悩んだときに、
`resources :users` の部分をコメントアウトして `rake routes` してみたらルートがなくなった(正確には別に書いていたルートが一個だけ残った)
というのを思い出して、その話をしたら、
「シンボルのところを別の文字列に置き換えるとその文字列をもとにルーティングしてくれるんだよ〜」と言われたので、やってみた!
config/routes.rb を書きかえる
#resources :users resources :foo
$ rake routes Prefix Verb URI Pattern Controller#Action foo_index GET /foo(.:format) foo#index POST /foo(.:format) foo#create new_foo GET /foo/new(.:format) foo#new edit_foo GET /foo/:id/edit(.:format) foo#edit foo GET /foo/:id(.:format) foo#show PATCH /foo/:id(.:format) foo#update PUT /foo/:id(.:format) foo#update DELETE /foo/:id(.:format) foo#destroy
おおおーーー!!!いい感じにしてくれたーーー!!!
foo は複数形にできないみたいで `users#index` となっていたところが `foo#index` とかなっていると、ゆかおさんが指摘してくださいました。
※ここから3/24追記※
tkawa さんがコメントしてくださったんですが、`resources :users` と複数形で書くところなので
`resources :foos` と書くと
Prefix Verb URI Pattern Controller#Action foos GET /foos(.:format) foos#index POST /foos(.:format) foos#create new_foo GET /foos/new(.:format) foos#new edit_foo GET /foos/:id/edit(.:format) foos#edit foo GET /foos/:id(.:format) foos#show PATCH /foos/:id(.:format) foos#update PUT /foos/:id(.:format) foos#update DELETE /foos/:id(.:format) foos#destroy
となるのでした!
ちなみに `resources :people` だと
Prefix Verb URI Pattern Controller#Action people GET /people(.:format) people#index POST /people(.:format) people#create new_person GET /people/new(.:format) people#new edit_person GET /people/:id/edit(.:format) people#edit person GET /people/:id(.:format) people#show PATCH /people/:id(.:format) people#update PUT /people/:id(.:format) people#update DELETE /people/:id(.:format) people#destroy
となるのでした!!
`new_person`って単数形になってるよ!!!!!
Rails様すごいー!
※追記ここまで※
遊んだあとは、 `git checkout .` で元通り。
やっぱり「やってみる」の大事ですね。
これをやったことでわかったのは、
resoucesの書き換えが即座に反映されるということで、RailsはブラウザからのリクエストのたびにRails routerさんが`とってきてる`ということ。
どう表現するのが正しいのがわからないのですが。。
ターミナルの別タブでサーバーを立ち上げたまんま、アプリを作成して、ブラウザをリロードすれば反映されるRails様。
その他
他にも、モデルと、データベースのテーブルの違いを再確認したり、
@users変数って?、とか(これはもうちょっと理解を先延ばしにしても大丈夫では、となった)、
「ビューは、その中に埋め込まれているRubyを使用してHTMLを生成する」っていう表現に疑問をもったり、
よちよち充実した40分でした。
次回
データベース入門回のときにお世話になった21cafeさんで、
3/24(月)20時からです。
きれいな会場、あがる!!