学習RoR(3)
これまでうまくいかなかったのはすべて以下の言葉につきるなあ、と。
原則2設定よりも決まり事を優先すること
「かんたん RoR P.018 から」
多少違うのだけれど、もっとしっかり読み込んでおくべきだった。
データベースの参照の方向によって、アクセスの方法が異なるという記述( P.267 )があったのに見逃していたというのもある。「かんたん RoR 」の場合を整理すると、
restaurant [ has_many :items ]↑
item [ belongs_to :restaurant , has_many :pictures ]
↑
pictures [ belongs_to :item ]
となっていて、controller は item に統一されている。で、ここから list のために render :partial => 'listitem', :collection => @items を使ってパーシャル rhtml からアクセスするとき、item は listitem.xxx とそのまま、restaurant なら listitem.restaurant.xxx というように使える、と。pictures の場合は、listitem.pictures.xxx とは出来ないので、listitem.pictures.each do |pic| などとして使っている、と。
で、結局この使えない組み合わせをやっていてハマッていたというわけで、なんともお粗末。(ということなのだと思う。restaurant を controller にして、listitem.item.xxx とやろうとしていたような状況)
整理してみると has_many しかない側を controller にすると listitem.restaurant.xxx というアクセスの仕方ができない。使いたければ、belongs_to を設定している側を controller にしなくてはならない、ということなのではないかなと。
もちろん、どちらが良いということではなく、処理の方法の如何によるということで判断すればよいのだろうとは思うけれど。
それってつまりは、冒頭にだした「 Rails の哲学」的なことだよなあ、と反省した次第。もっともこうして学んでいくと思えばよいのか。それにしても、という思いはあるなあ。いやはや。
追記:(11/10)
後で「かんたん RoR 」を読んでいたら、なんとなく勘違いしているのではないかと思い出した。4日目の album プロジェクトではそれぞれ違う名前なのに機能しているわけで、つまりそれとこれとは関係ないのかも、と。
少しいじっていたらなんとなく(まさになんとなく)期待する動作ができるようになったので、もう少し根本的に理解を深めないと駄目かなとも。道は険しい。
| 固定リンク
コメント