Railsã§ã®URLè¨è¨ãèãã¦ã¿ã(5) Railsã®ãªã½ã¼ã¹ãã¿ã¼ã³
URLè¨è¨ã®å段éã¨ãã¦ãã¨ã¦ã大åãªã®ããªã½ã¼ã¹è¨è¨ã§ãããã®Webã¢ããªã»Webãµã¼ãã¹ã§ä½ãæä¾ããã®ãã決ã¾ãé¨åã ããã§ãããããããªããªããªã½ã¼ã¹ã¨ããæ¦å¿µãå®çãã¦ããªããããªã®ã§ãRailsã§æ¡ç¨ããã¦ãããã¿ã¼ã³*1ãä¾ã«æãã¦ç´¹ä»ãã¦ã¿ããã¨æãã¾ãã
ä»ã¾ã§ã®ã·ãªã¼ãºè¨äºã¨éãªãã¨ãããããã¾ãããã¾ã¨ãã¨ãããã¨ã§â¦ã
ãªã½ã¼ã¹ã¨ã¯
ç°¡åã«è¨ãã¨ããURLã§ç¤ºããããã®ãã§ããURLã¨ããã®ãâUniform Resource Locatorâã®ç¥ã§ããããã
http://d.hatena.ne.jp/tkawa/20110819/p1 http://d.hatena.ne.jp/tkawa/20110819
æåã®ãã®ã¯ãååæ¸ããããã°è¨äºãRailsでのURL設計を考えてみる(4) スラッシュと「持っている」関係ãã¨ãããªã½ã¼ã¹ã§ãã
ãã®æ¬¡ã¯ããtkawaが2011年8月19日に書いたブログ記事ãã¨ãããªã½ã¼ã¹ã§ããå®éã«ã¯ä¸èº«ã®è¨äºã¯1ã¤ãããªãã®ã§ãããããè¤æ°ã®è¨äºãããã°åæããããã¨ã«ãªãã¾ãã
ããã«éãããURLã§ç¤ºããã¨ãã§ããæ
å ±ã¯ãã¹ã¦ãªã½ã¼ã¹ã§ããURLã¯ãªã½ã¼ã¹ã«ã¤ããããååã¨ãããã¾ã*2ã
Railsã§ç¨æããã¦ãããã¿ã¼ã³
ãã¹ã¦ããªã½ã¼ã¹ãªã®ã§ãããããªç¨®é¡ãããããã®ã§ããããã®ä¸ã§ãå ¸åçãªãã¿ã¼ã³ãããã¤ãåå¨ãã¾ããRailsã§ã¯ããã®ãã¿ã¼ã³ã«æ²¿ã£ã¦è¨è¨ããã¨ç°¡åã«æ¸ããããã«ãªã£ã¦ãã¾ãã
Memberãªã½ã¼ã¹ã¨Collectionãªã½ã¼ã¹
Memberãªã½ã¼ã¹ã¯ä¸çªåºæ¬ã¨ãªããªã½ã¼ã¹ã§ãã1åã®ãªãã¸ã§ã¯ããããã¼ã¿ãã¼ã¹ã®1ã¬ã³ã¼ããæãã¨ããã¤ã¡ã¼ã¸ã§ãã
ãã®ãããªURLãMemberãªã½ã¼ã¹ã®ä¾ã§ãã
http://d.hatena.ne.jp/tkawa/20110819/p1 http://baseball.example.jp/leagues/central http://railsapp.example.com/users/12
Collectionãªã½ã¼ã¹ã¯ãMemberãªã½ã¼ã¹ã種é¡ãã¨ã«ã¾ã¨ãããã®ã§ãã¡ããã©ãã£ã¬ã¯ããªï¼ãã©ã«ãï¼ã®ãããªã¤ã¡ã¼ã¸ã§ãã
ä¾ã¯ãã®ãããªURLã§ãã
http://d.hatena.ne.jp/tkawa/20110819 http://baseball.example.jp/leagues http://railsapp.example.com/users
è¦ãã¨æ°ã¥ãã¾ãããMemberãªã½ã¼ã¹ã®æ«å°¾ãåã£ããã®ã«ãªã£ã¦ãã¾ããè¨ãæããã¨ãCollectionãªã½ã¼ã¹ã®å¾ãã«ã¹ã©ãã·ã¥åºåãã§IDããã£ã¤ãããã¨ã§ãMemberãªã½ã¼ã¹ã®URLã«ãªãã¾ãã
Member, Collectionãªã½ã¼ã¹ã®URLã®æ§é *3
/{collection_name}/{id} /{collection_name}
Collectionãªã½ã¼ã¹ã®åå(collection_name)ã¯åè©ã®è¤æ°å½¢ãæ¨å¥¨ããã¾ããMemberãªã½ã¼ã¹ã®åå(id)ã¯ããã®ãªã½ã¼ã¹ãCollectionå ã§ä¸æã«ç¹å®ã§ããååããããã¯çªå·ã§ãã
Singularï¼åæ°ï¼ãªã½ã¼ã¹
Singularãªã½ã¼ã¹ã¯ãMemberãªã½ã¼ã¹ã¨ä¼¼ã¦ãã¾ããããã 1ã¤ãããªããªã½ã¼ã¹ã§ããããã¯ã°ãã¼ãã«ã«1ã¤ãããªãã¨ããå ´åã®ã»ãã«ããããMemberãªã½ã¼ã¹ã«1対1ã§çµã³ã¤ãã¦ããå ´åãã»ãã·ã§ã³ãªã©ã®æé»ã®ãã©ã¡ã¼ã¿ã«å¯¾ãã¦1ã¤ãããªãå ´åãå«ã¾ãã¾ãã
ä¾ã¯ãã®ãããªURLã§ãã
http://b.hatena.ne.jp/tkawa/config http://railsapp.example.com/users/12/profile http://u2plus.jp/user
æå¾ã®ä¾ã¯ãåãå¶ä½ã«é¢ãã£ã¦ãããµã¼ãã¹ã®U2plusã®ä¾ãªã®ã§ãããâ/user
âã§ãç¾å¨ãã°ã¤ã³ãã¦ããã¦ã¼ã¶ãã¨ãããªã½ã¼ã¹ãæããã¨ã«ãã¦ãã¾ããããã¯ã»ãã·ã§ã³ã«å¯¾ãã¦1ã¤ãããªããªã½ã¼ã¹ã«ãªã£ã¦ãã¾ãã
Singularãªã½ã¼ã¹ã®ååã¯ãåè©ã®åæ°å½¢ãæ¨å¥¨ããã¾ãã
routes.rbã®æ¸ãæ¹
ä¸è¨ã®ãã¿ã¼ã³ã«å¾ãã°ãroutes.rbã®æ¸ãæ¹ã¯ã¨ã¦ãç°¡åã§ãã
Memberãªã½ã¼ã¹ãCollectionãªã½ã¼ã¹ã®å ´å
resources :users
ããã§ãâ/users
âã¨ããCollectionãªã½ã¼ã¹ã¨ãâ/users/{id}
âã¨ããMemberãªã½ã¼ã¹ãã§ãã¾ãã
Singularãªã½ã¼ã¹ã®å ´å
resource :user
ããã§ãâ/user
âã¨ããSingularãªã½ã¼ã¹ãã§ãã¾ãã
çµã¿åãã
çµã¿åãããã¨ããããã®ããã«ãã¹ãããã ãã§ãã
resources :users do resource :profile end
ããã§ãâ/users
âãâ/users/{id}
âã«å ãã¦ãâ/users/{id}/profile
âã¨ããSingularãªã½ã¼ã¹ãã§ãã¾ãã
ãªã½ã¼ã¹è¨è¨ã®æé
Railsã§æ¡ç¨ããã¦ãããªã½ã¼ã¹ã®ãã¿ã¼ã³ã¯ããªãä¸è¬çã§ãå¤ãã®é¨åã«é©ç¨ã§ããã®ã§ããªã½ã¼ã¹è¨è¨ã®æéã«ãªãã¾ããããã«Railsã§ã¯ããã«å¯¾å¿ãã¦èªåçã«URLãã³ã³ããã¼ã©ã®è¨è¨ã決ã¾ãã¾ãã
ãã¡ãããã£ã¨ç´°ããè¨è¨ããããã¨ãããã§ãããããã®ã¨ãã¯ããããã¼ã¹ã«ã«ã¹ã¿ãã¤ãºãã¦ããã°ããããã§ãããã®ããã®æ¹æ³ãååã«ç¨æããã¦ãã¾ãã
ã¾ããRailsã ãã§ãªããSinatraãªã©ã®ã»ãã®ãã¬ã¼ã ã¯ã¼ã¯ã使ã£ã¦è¨è¨ããã¨ããããã®ãã¿ã¼ã³ãã¾ãåèã«ãã¦ã¿ãã®ãããã¨æãã¾ãã
*1:åæ¸ç±ãè¦ãã¨ããªã½ã¼ã¹ã¢ãã«ãã¨ããç¨èªã主ã«ä½¿ããã¦ããããã§ãããRailsã§ã¯ãã¢ãã«ããç´ããããã®ã§ãããã§ã¯ããã¦ããã¿ã¼ã³ãã¨å¼ã¶ãã¨ã«ãã¾ã
*2:ã§ã¯URL=ãªã½ã¼ã¹ãªã®ãã¨ããã¨ãåããªã½ã¼ã¹ãè¤æ°ã®URLããã¤ãã¨ãããã®ã§ãå³å¯ã«ã¯éãã®ã§ãããã»ã¼åãã¨æã£ã¦ãåé¡ãªãã§ããã
*3:{ } ã¯ãURIテンプレートã¨ããURLä¸ã«ãã©ã¡ã¼ã¿ãå«ãã¨ãã®è¨æ³ã§ã