Rails の Routing あれこれ

やろうとしたこと

users っていうリソースの下に image っていうルーティングを追加して、指定 User のアイコン画像を返してくれるようなアクションを定義したかった、とかそういう状況。

case1

まず思い付くままに書いてみたら params に渡るキーが user_id になっちゃったのよね。他のアクションでは id だから、これだと処理を共通化しにくくて困る。

case2

とにかく欲しいルーティングを手に入れる!と思って resources の外に強引に書いたケース。欲しいものは手に入ったけれど、コードの納まりが悪くてなんだかな〜という気持ちになる。

case3

member を指定すればよいのだった、と気付いて case1 に member を付けた版の実装を試す。これでまぁ、すっきりしたコードで欲しかったルーティングは手に入ったのだけれど、case1 と case3 を比べてみると user_image_pathimage_user_path の違いがあることに気付いて、これをリファレンスなしでも言えるようにはなれないな〜と思った。なんか collection の方は明示してやらないといけない理由がわかるのだけれど、member の方の指定の有無で微妙に挙動が変わるのも、なかなか理解が難しいとあらためて思った。

another case

Rails の Routing の細かい挙動を「こういうときはこう、こういうときはこのオプション付ける」とか覚えるより、そういうのに依存しないコードにした方がよいのでは〜?という気持ちになった。つまり Rails - Resource Routingつらくね? - Qiita みたいなお話です。

Rails の Routing は開発者間の共通認識を育てるのにはだいぶ貢献してくれていて、そこで共通認識を持てたもの同士なら、列挙型で書いてしまってよいのでは〜、と思った次第です。よもやま。