railsのredirect_toにidを渡すときに困った話
どうした
redirect_toしたいんだけど、なんか挙動が変。
/user/:id/items
からlink_toで
/item/:id/edit
に行って、編集したら
/user/:id/items
に帰ってきたい。
だからitem_controller.rbにこう書くんだけど
@item = Item.find params[:id] redirect_to items_user_path, id: @item.user
/user/:id/itemsで受け取るidは、itemのidになってしまう。
@item = Item.find params[:id] redirect_to items_user_path
こう書いてもitemのidが渡る。途中でparams[:id]の値を書き換えても残るので謎。
解決法
@item = Item.find params[:id] redirect_to items_user_path(id: @item.user)
こういう書き方があるので、こう書く。
こうするとちゃんとuserのidでparams[:id]が上書きされる。
なんで?
p items_user_path
すると分かるが、
"/user/<itemのid>/items"
になってる。
それを
items_user_path(id: @item.user)
で:idの中身を上書きしてるのだろうけど、どこでやってるのか分からなかった。
どこなんだろう。