読者です 読者をやめる 読者になる 読者になる

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の中身を上書きしてるのだろうけど、どこでやってるのか分からなかった。
どこなんだろう。

広告を非表示にする