Rails の Routing あれこれ
やろうとしたこと
users っていうリソースの下に image っていうルーティングを追加して、指定 User のアイコン画像を返してくれるようなアクションを定義したかった、とかそういう状況。
case1
まず思い付くままに書いてみたら params に渡るキーが user_id
になっちゃったのよね。他のアクションでは id
だから、これだと処理を共通化しにくくて困る。
case2
とにかく欲しいルーティングを手に入れる!と思って resources の外に強引に書いたケース。欲しいものは手に入ったけれど、コードの納まりが悪くてなんだかな〜という気持ちになる。
case3
member
を指定すればよいのだった、と気付いて case1 に member
を付けた版の実装を試す。これでまぁ、すっきりしたコードで欲しかったルーティングは手に入ったのだけれど、case1 と case3 を比べてみると user_image_path
と image_user_path
の違いがあることに気付いて、これをリファレンスなしでも言えるようにはなれないな〜と思った。なんか collection
の方は明示してやらないといけない理由がわかるのだけれど、member
の方の指定の有無で微妙に挙動が変わるのも、なかなか理解が難しいとあらためて思った。
another case
Rails の Routing の細かい挙動を「こういうときはこう、こういうときはこのオプション付ける」とか覚えるより、そういうのに依存しないコードにした方がよいのでは〜?という気持ちになった。つまり Rails - Resource Routingつらくね? - Qiita みたいなお話です。
Rails の Routing は開発者間の共通認識を育てるのにはだいぶ貢献してくれていて、そこで共通認識を持てたもの同士なら、列挙型で書いてしまってよいのでは〜、と思った次第です。よもやま。