盛大に勘違いしていたこと
@items = Item.all
っていうインスタンス変数をコントローラに設定してあったとして。
Nekoteniはね・・・@items は @itemの集合体だと思ってたんだよ・・・。
わかってる人には「は?」だよね。 「何言ってんの?お前?」だよね。
つまりね、こういうこと。
<% @items.each do |item| %> <%= link_to item.name, item %> <% end %>
これのね、|item|にね、@itemsをばらした@itemが入ってると思ってたのw
@itemsっていうコンテナの中にいっぱい@itemが詰まってるっていうイメージね。
なんでこんな盛大な勘違いしたかっていうと、自分が調べた情報を自分に都合よく解釈してコンボ技に発展させたから。
前提:Railsガイドに書いてあった一部分のみ覚えていた。
1冊の雑誌にだけリンクしたいのであれば、以下のように書きます。 <%= link_to 'Magazine details', @magazine %>
Nekoteniはlink_toのパスへの理解にあやふやなところがあって、何で.each doした時のlink_toのパスがitemだけになるのかわからなかった。
↓
そういやRailsガイドに「1冊の雑誌にだけリンクしたいのであれば...」ってあったなぁ。
↓
@itemsと@magazineを見比べ。
↓
あ!@items.each doしたら|item|には@itemが入るのか〜\(^o^)/ (👈@itemsは@itemの集合体だと勘違いした瞬間w)
Railsガイドにはちゃんと書いてあるわけですよ。 コントローラに@magazine = Magazine.find(17)って設定したら、っていう前提が。 でもそこはもう忘れてるわけ(笑)
自分の知ってることを、何とか目の前の事象と結びつけて理解しようとするのは、人間の性らしいので責められるものではない。 けど、それが勘違いというものの原因でもあるので、理解したつもりになってるものへの再学習をしないとな、とNekoteniは思ったのでした。
もとい、何で <%= link_to item.name title %>
のpathが title
だけでいいのかというと、Railsがよしなにやってくれてる、という一言に尽きるらしい。
@items = Item.all で、@itemsにはItemのインスタンスがたくさん入ってるっていう理解はしてた。
そのインスタンスの中には当然idがあって、Railsさんが「あ、これはItemクラスのインスタンスだね。あ、idもあるね。んじゃパスを自動で作ってあげるよ」ってよしなにやってくれてるらしいw
大まかな理解としては、 <%= link_to item.name, item_path(item) %>
の省略形って感じでいいみたい。
@itemsも@itemもインスタンスを入れるための単なる器であって、コントローラに設定されてないとviewでは使えないんだよー!ということを、改めて理解したのでした。ちゃんちゃん。