QA@IT
«回答へ戻る

回答を投稿

試行に書かれているとおり URLヘルパーをオーバーライドするのを時々利用しています。

規約からはずれてしまい直感的ではないと感じるのであれば user_item_path をオーバライドではなく item_path を定義したり、工夫した名前にするぐらいだと思います。
form_forlink_to などでリンク先に [@user, @item] とした時にも user_item_path が利用されますが、この時に @item にすると item_pathになるので、楽ができそうな気がします。
(別の問題が発生する可能性も出てきそうですが)

今回のモデル構成だと、Itemオブジェクトは必ずUserオブジェクト1つに結びつくので、@itemという引数さえ分かれば@userは自明のはずです。

構成上では自明ですが、ルーティングはモデルの情報を利用しないので、Railsからすると自明ではないと思います。特定の規約に合わせているので偶然動くのに過ぎません。
ルーティングを工夫すればなんとかする方法があるかも知れませんが、ヘルパーをオーバーライドする観点で回答してみました。

試行に書かれているとおり URLヘルパーをオーバーライドするのを時々利用しています。

規約からはずれてしまい直感的ではないと感じるのであれば `user_item_path` をオーバライドではなく `item_path` を定義したり、工夫した名前にするぐらいだと思います。
`form_for` や `link_to` などでリンク先に `[@user, @item]` とした時にも `user_item_path` が利用されますが、この時に `@item` にすると `item_path`になるので、楽ができそうな気がします。
(別の問題が発生する可能性も出てきそうですが)

> 今回のモデル構成だと、Itemオブジェクトは必ずUserオブジェクト1つに結びつくので、@itemという引数さえ分かれば@userは自明のはずです。

構成上では自明ですが、ルーティングはモデルの情報を利用しないので、Railsからすると自明ではないと思います。特定の規約に合わせているので偶然動くのに過ぎません。
ルーティングを工夫すればなんとかする方法があるかも知れませんが、ヘルパーをオーバーライドする観点で回答してみました。