ドグサレ初心者のへっぽこビッグウェーブ

地球の底辺にいるゴミがプログラミングとか音楽とかを語るクソブログ

shallowでルーティングを楽にしようとしたけどできなかった話

コードを書くのがはてブの方が簡単らしいので、こっちにおひっこし。
他の記事もあわせておひっこし。


これまでのあらすじ

railsでscaffoldでネストしたらいろいろルート通らなくなってる。

わるさをしてるのは主にネストで子になってるMusic部分。いろいろカッツ・アイ
http://pbs.twimg.com/media/CBlwshVUAAA2zXF.jpg
したのが多分原因。

けどもしかしたらshallowでなんとかなるかも。
(参照)Rails - resources を nest するときは shallow を使うと幸せになれる - Qiita


というわけでshallowを使ってみる

resources :artists, shallow: true do
  resources :musics

結果としては、うまくルートは通ったんだけれども、今度はshowのパラメータでおかしくなる。

  # GET artists/xx/musics/1
  # GET artists/xx/musics/1.json
  # => params = {artist_id:xx, id:1}
  def show
    @artist = Artist.find(params[:artist_id])  #Artistのインスタンス変数
    @music = @artist.musics.find(params[:id])  #Musicのインスタンス変数(大文字にならないことに注意)
  end

artistのパラメータをネスト構造前提で引っ張ってきてたので、パラメータねえぞって言われる。
で、よくよく考えてみたところ。MusicのidはArtistのidに依存関係があるので、
どっちにしてもパラメータつけないとだめかもしれん。

というわけで、shallowをつかうのはやめましたとさ。