- ¥Ð¥Ã¥¯¥¢¥Ã¥×°ìÍ÷
- ¥½¡¼¥¹ ¤òɽ¼¨
- Ruby on Rails/Âè11²óÊÙ¶¯²ñ - RESTful Rails Development ¤Ïºï½ü¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
- 1 (2007-04-13 (¶â) 16:10:30)
- 2 (2007-04-13 (¶â) 18:33:54)
- 3 (2007-04-29 (Æü) 00:27:48)
Ruby on Rails/Âè11²óÊÙ¶¯²ñ - RESTful Rails Development?
Ruby on RailsÊÙ¶¯²ñ°ìÍ÷ †
'Ruby on Rails' ¤Ë¤Ï¡¢²¼°ÌÁؤΥڡ¼¥¸¤¬¤¢¤ê¤Þ¤»¤ó¡£
Âè11²óÊÙ¶¯²ñ¤Î¥Í¥¿ †
¥Í¥¿¤â¤È¤Ï²¼µ¤Ç¤¹¡£
b-simple.de - Ruby on Rails, Entwicklung, Coaching und mehr!
http://www.b-simple.de/documents
Æü»þ †
- 2006/04/13(¶â)
»²²Ã¼Ô †
Æ°²è †
RESTful Rails †
- HTTP¤ÏGET¤äPOST¥á¥½¥Ã¥É¤À¤±¤Ç¤Ê¤¯¡¢PUT, DELETE¥á¥½¥Ã¥É¤â¤¢¤ë
- REST¤È¤Ï¡¢´Êñ¤Ë¤¤¤¦¤ÈHTTP¤ÎGET, POST¤À¤±¤Ç¤Ê¤¯, PUT, DELETE¤ò»È¤Ã¤¿¤ä¤êÊý¤Ç¤¢¤ë
- Rails 1.2¤Ç¤ÏREST¤¬¥µ¥Ý¡¼¥È¤µ¤ì¤¿
- ¤³¤Î¥Á¥å¡¼¥È¥ê¥¢¥ë¤ÏREST¤Î¥³¥ó¥»¥×¥È¤ÈÇطʤÎû¤¤¾Ò²ð¤«¤é¤Ï¤¸¤Þ¤ë
- Rails¤ÎScaffold¤ò»È¤¦¤È¸«¤ë¤³¤È¤¬¤Ç¤¤ëREST-Controller¤Èmodel¤Ï¡¢RESTful Rails¤Î³«È¯¤ÎÍý²ò¤ò½õ¤±¤Æ¤¯¤ì¤ë
- ¼¡¤ËREST Routing¤È¤è¤Ð¤ì¤ëµ¡Ç½¤ÎÀâÌÀ¤ò¤¹¤ë¡£
- Nested Resources¤Î¾Ï¤Ï¤è¤ê¾åµé¤ÊÆâÍƤǡ¢¤É¤Î¤è¤¦¤ËREST-URL¤Î¥³¥ó¥»¥×¥È¤ËÈ¿¤»¤º¤Ë¡¢¿Æ»Ò´Ø·¸¤Ë¤¢¤ë¥ê¥½¡¼¥¹¤¬¥Í¥¹¥È¤µ¤ì¤ë¤«¤Ë¤Ä¤¤¤ÆÀâÌÀ¤¹¤ë
- ¤³¤Î¥Á¥å¡¼¥È¥ê¥¢¥ë¤Î½ª¤ï¤ê¤Ï¡¢REST¤ÈAJAX¤Ë¤Ä¤¤¤Æ¤ÎÀâÌÀ¤À
- RESTful¤Ê¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ò¥Æ¥¹¥È¤·¡¢¥¯¥é¥¤¥¢¥ó¥È¥µ¥¤¥É¤ÎREST¤Î°ìÉô¤Ç¤¢¤ë¡¢ActiveResource?¤ò¾Ò²ð¤¹¤ë
REST¤È¤Ï¤Ê¤Ë¤«? †
- REST¤È¤¤¤¦¸ÀÍÕ¤Î̾¤Å¤±¿Æ¤ÏPh.D.¤À(¥À¥ì?)¡£
- Representational State Transfer¤Îά¤À¡£
- REST¤Ïɸ½àŪHTTP¥á¥½¥Ã¥É¤Ç¤¢¤ëGET, POST, PUT, DELETE¤ò»ÈÍѤ·¤ÆWeb¤Î¥ê¥½¡¼¥¹¤òÍ׵ᤷ¡¢Áàºî¤¹¤ëWeb¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Î¤¿¤á¤Î¡¢¥¢¡¼¥¥Æ¥¯¥Á¥ã¥Ñ¥é¥À¥¤¥à¤òÀâÌÀ¤¹¤ë¡£
- REST¤Ç¤Ï¥ê¥½¡¼¥¹¤ÏHTTP·Ðͳ¤ÇURL¤Ç¥¢¥É¥ì¥¹ÉÕ¤±¤·¤ÆÍ׵᤬²Äǽ¤À¡£
- ¥ê¥½¡¼¥¹¤Ï¡¢¥¯¥é¥¤¥¢¥ó¥È¤Î¸Æ¤Ó½Ð¤·¤Ë±þ¤¸¤Æ¡¢HTML¤äXML¤äRSS¤Î¤è¤¦¤Ê°Û¤Ê¤Ã¤¿¥Õ¥©¡¼¥Þ¥Ã¥È¤Çɽ¸½¤Ç¤¤ë¡£
- REST-URLs¤Ï¥æ¥Ë¡¼¥¯¤À
- ¥ê¥½¡¼¥¹URL¤Ï¡¢¤³¤ì¤Þ¤Ç¤ÎRails¤Î¥¢¥×¥ê¤È¤Ï°ã¤¤¡¢¥³¥ó¥È¥í¡¼¥é¤È¤½¤ì¤ËÂбþ¤¹¤ëAction¤Ë¤è¤Ã¤Æ·è¤Þ¤ë¤Î¤Ç¤Ï¤Ê¤¯¡¢¥ê¥½¡¼¥¹¼«¿È¤Ë¤è¤Ã¤Æ·èÄꤵ¤ì¤ë¡£
(¿Þ1.1)
- ¿Þ1.1¤Ç¤Ï¡¢3¤Ä¤Î¥ê¥½¡¼¥¹¤¹¤Ù¤Æ¤Ï¡¢URL¤Î»Ï¤Þ¤ê¤Îidentical part¤Ë¤è¤Ã¤Æ½»½êÉÕ¤±¤é¤ì¡¢¤½¤ì¤¾¤ì¤Ï¤½¤Î¥ê¥½¡¼¥¹¤ÎID¤Ë¤è¤Ã¤Æ¥Õ¥©¥í¡¼¤µ¤ì¤ë¡£
- Rails¤Ç¤Ïx¥³¥ó¥È¥í¡¼¥é¤È¥â¥Ç¥ë¤ÎÁȤ߹ç¤ï¤»¤Æ¥ê¥½¡¼¥¹¤òɽ¸½¤¹¤ë¡£
- ¤Ê¤Î¤Ç¡¢¥Æ¥¯¥Ë¥«¥ë¤ÊΩ¾ì¤«¤é¤¤¤¦¤È¡¢¿Þ1.1¤Î¥×¥í¥¸¥§¥¯¥È¥ê¥½¡¼¥¹¤Ï¡¢¥¤¥ó¥¹¥¿¥ó¥¹¤Îmanipuration¤ËÂФ·¤Æ±þÅú¤Ç¤¤ëProjectController?¤È°ì½ï¤ÎÁȤ߹ç¤ï¤»¤Ë¤ª¤±¤ëActiveRecord?¤ò·Ñ¾µ¤·¤¿¥¯¥é¥¹¡ÖProject¡×¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤À¡£
P9
1.2 ¤Ê¤¼REST?
- proved¤ÊMVC-Consept¤ò»ÈÍѤ·¤Æ2ǯ´ÖRails¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ò¤È¤Æ¤âsuccessfully¤Ë³«È¯¤·¤Æ¤¤Æ¤¤¤ë¤³¤È¤ò¿´¤ËÊݤäƤ¤¤ë¤È¤¡¢¤³¤ì¤Ï¤è¤¤¼ÁÌä¤À¡£
- ¤·¤«¤·¡¢REST¤¬»äã¤Ë¤ß¤»¤ë¤â¤Î¤ÏRails¤¬conceptional improvements¤Î¤¿¤á¤ÎÉô²°¤ò»ý¤Ã¤Æ¤¤¤ë¤È¤¤¤¦¤³¤È¤À???
- REST¥Ù¡¼¥¹¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¼¡¤ÎÆÃħ¥ê¥¹¥È¤ÏÌÀ³Î¤Ë¤¹¤ë???;
- ¤¤ì¤¤¤ÊURL¡£REST-URL¤Ï¥¢¥¯¥·¥ç¥ó¤Ç¤Ï¤Ê¤¯¥ê¥½¡¼¥¹¤òɽ¸½¤·¤Æ¤¤¤ë¡£URL¤Ï¤¤¤Ä¤âƱ¤¸¥Õ¥©¡¼¥Þ¥Ã¥È¤ò¤â¤Ä¡£ºÇ½é¤Ë¥³¥ó¥È¥í¡¼¥é¡¼¤¬¤¤Æ¡¢¤½¤ì¤«¤é»²¾È¤µ¤ì¤ë¥ê¥½¡¼¥¹¤ÎID¤¬¤¯¤ë¡£Í׵ᤵ¤ì¤¿manipulation¤ÏURL¤«¤é±£¤µ¤ì¡¢HTTP verbs¤Î½õ¤±¤Çɽ¸½¤µ¤ì¤ë¡£
- °Û¤Ê¤Ã¤¿±þÅú¥Õ¥©¡¼¥Þ¥Ã¥È¡£REST¥³¥ó¥È¥í¡¼¥é¤Ï¤¢¤ëÊýË¡¤Ç³«È¯¤µ¤ì¤ë¡£¤¹¤Ê¤ï¤Á¡¢¥¢¥¯¥·¥ç¥ó¤Ï°Û¤Ê¤Ã¤¿±þÅú¥Õ¥©¡¼¥Þ¥Ã¥È¤ò±¿¤Ö¤³¤È¤¬¤Ç¤¤ë¡£¥¯¥é¥¤¥¢¥ó¥È¤ÎÍ×µá¤Ë°Í¸¤·¤Æ¡¢Æ±¤¸¥¢¥¯¥·¥ç¥ó¤¬HTML, XML, RSS¤ò±¿¤Ö¤³¤È¤¬¤Ç¤¤ë¡£¤¹¤Ê¤ï¤Á¡¢¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ÏÊ£¿ô¤Î¥¯¥é¥¤¥¢¥ó¥È¤Ë±þ¤¸¤Æ¥Ï¥ó¥É¥ë¤Ç¤¤ë¤è¤¦¤Ë¤Ê¤ë¡£
- ¥³¡¼¥ÉÎ̤¬¾¯¤Ê¤¤¡£Ê£¿ô¤Î¥¯¥é¥¤¥¢¥ó¥È¤òÊä¤Ǥ¤ë³«È¯¤ÏDRY¤Î°ÕÌ£¤Ë¤ª¤¤¤Ærepetition¤òavoid¤·¡¢¥³¥ó¥È¥í¡¼¥é¡¼¤¬¤è¤ê¾¯¤Ê¤¤¥³¡¼¥É¤â¤Ä·ë²Ì¤È¤Ê¤ë
- CRUD»Ø¸þ¥³¥ó¥È¥í¡¼¥é¡£³Æ¥³¥ó¥È¥í¡¼¥é¤¬°ì¤Ä¤Î¥ê¥½¡¼¥¹¥¿¥¤¥×¤Îmanipulation¤ËÂФ·¤Æ±þÅú²Äǽ¤Ç¤¢¤ë¤È¤¤¤¦ÊýË¡¤Ë¤ª¤¤¤Æ¡¢¥³¥ó¥È¥í¡¼¥é¤È¥ê¥½¡¼¥¹¤Ï²ò¤±¤Æ°ì½ï¤Ë°ì¤Äñ°Ì¤Ë¤Ê¤ë
- ÌÀ³Î¤Ê¥¢¥×¥ê¥±¡¼¥·¥ç¥óÀ߷ס£RESTful¤Ê³«È¯¤ÏÌÀ³Î¤Ê¥³¥ó¥»¥×¥È¤Î·ë²Ì¤È¤Ê¤ê¡¢manipulatable¤Ê¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Î¥Ç¥¶¥¤¥ó¤Ë¤Ê¤ë
- ¤³¤Î¥Á¥å¡¼¥È¥ê¥¢¥ë¤Î4ÈÖÌܤξϤϡ¢Îã¤Î¥Ø¥ë¥×¤ò»È¤Ã¤Æ¡¢¾åµ¤Î̾Á°ÉÕ¤±¤µ¤ì¤¿ÆÃħ¤Î¤¹¤Ù¤Æ¤òÌÀ³Î¤Ë¤¹¤ë
1.3 What's New
- ¤â¤·¡¢¤¢¤Ê¤¿¤¬¡¢REST¤Ë´ð¤Å¤¤¤¿¥¢¥×¥ê¥±¡¼¥·¥ç¥óÀ߷פ¬¤¢¤Ê¤¿¤Î²¼²áµî¤Î³«È¯·Ð¸³¤òÍøÍѤǤ¤Ê¤¯¤¹¤ë¤È¹Í¤¨¤Æ¤¤¤ë¤Ê¤é¡¢»äã¤Ï¤¢¤Ê¤¿¤òassure¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡¢¤¹¤Ê¤ï¤Á¡¢¤½¤ó¤Ê¤³¤È¤Ï¤Ê¤¤¡£REST¤Ï¡¢¤Þ¤ÀMVC¤Ë´ð¤Å¤¤¤Æ¤¤¤ë¤·¡¢µ»½ÑŪ´ÑÅÀ¤Ç¸«¤Æ²¼µ¡¢¤Î¿·¤·¤¤µ»½Ñ¤Øreduced¤µ¤ì¤ë¤³¤È¤¬¤Ç¤¤ë
- ¥³¥ó¥È¥í¡¼¥é¤Î¥³¡¼¥É¤Ë¤ª¤¤¤Ærespond_to¤òÍøÍѤ¹¤ë
- link¤Èform¤Î¤¿¤á¤Î¿·¤·¤¤helper¥á¥½¥Ã¥É
- ¥³¥ó¥È¥í¡¼¥é¥ê¥À¥¤¥ì¥¯¥È¤Ë¤ª¤±¤ëURL-Method¤ÎÍøÍÑ
- routes.rb¤ÎÃæ¤Îresource¥á¥½¥Ã¥É¤«¤éÀ¸À®¤µ¤ì¤ë¿·¤·¤¤¿·¤·¤¤·ÐÏ©
¤¢¤Ê¤¿¤Ï°ìÅÙREST¤òÍý²ò¤·¡¢¤½¤Îµ»½Ñ¤òÍøÍѤ¹¤ì¤Ð¡¢RESTful¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ÎÀ߷פϼ¡¤Îɸ½à¤È¤Ê¤ë¤À¤í¤¦¡£
1.4 Preparations
»ä¤¿¤Á¤Ï¡¢»ä¤¿¤Á¤ÎËÜRapidWeb? Development mit Ruby on Rails¤ÎÎã¤Ç¤¢¤ë¡¢¥×¥í¥¸¥§¥¯¥È´ÉÍý¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¡ÖOntrack¡×¤Îʸ̮¤È°ì½ï¤ÎÃæ¤Ç¡¢Rails¤Î¿·¤·¤¤ÆÃÄê¤ÎÆÃħ¤Ë¤Ä¤¤¤ÆÀâÌÀ¤·¤Æ¤¤¤¤Þ¤¹¡£
»ä¤¿¤Á¤Ï´°Á´¤Ê¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ò¤³¤³¤Ç¤Ï³«È¯¤·¤Ê¤¤¤À¤í¤¦¤¬¡¢REST¥³¥ó¥»¥×¥È¤Î¤¿¤á¤Îµ»½ÑŪ¤Ê´Ä¶¤òºîÀ®¤¹¤ë¤¿¤á¤ËƱ¤¸µ»½Ñ¤òÍøÍѤ·¤Þ¤¹¡£
¤Þ¤º¡¢»ä¤¿¤Á¤ÎRails¥×¥í¥¸¥§¥¯¥È¤ÎÀ¸À®¤ò¤Ï¤¸¤á¤Þ¤·¤ç¤¦
> rails ontrack
²¼µ¤Î¤è¤¦¤Ëdevelopment¤Ètest¤Î¥Ç¡¼¥¿¥Ù¡¼¥¹¤òºîÀ®¤·¤Þ¤¹
> mysql -u rails Enter password: mysql> create mysql> create mysql> quit
1.4.1 Rails 1.2
»ä¤¿¤Á¤Ï¡¢¤¹¤Ù¤Æ¤ÎÆɼԤ¬Rails1.2¤ò¥¤¥ó¥¹¥È¡¼¥ë¤·¤¿¤¤¤È¤ª¤â¤Ã¤Æ¤¤¤Ê¤¤¤«¤â¤·¤ì¤Ê¤¤¤È»×¤¤¤Þ¤¹¡£¤½¤³¤Ç»ä¤¿¤Á¤Ï¡¢»ä¤¿¤Á¤Îontrack¤ÎÎã¤Î¤ß¤¬¿·¤·¤¤¥Ð¡¼¥¸¥ç¥ó¤ò¤Ä¤«¤¦¤è¤¦¤Ë¡¢¥×¥í¥¸¥§¥¯¥È¥Ù¡¼¥¹¤Î1.2¤ÎRails¥¤¥ó¤¹¤È¥ì¡¼¥·¥ç¥ó¤ò¤¹¤ë¤³¤È¤ò¤ª¤¹¤¹¤á¤¹¤ë¡£
¥É¥¥å¥á¥ó¥È¤Ë¤½¤Ã¤ÆRails1.2¤Î¥¿¥°¤Ïrel_1-2-1¤È̾¤Å¤±¤é¤ì¤ë¡£
> cd ontrack > rake rails:freeze:edge TAG=rel_1-2-1
Ê̤ÎRails¤Î¤è¤ê¿·¤·¤¤¥Ð¡¼¥¸¥ç¥ó¤ò¥¤¥ó¥¹¥È¡¼¥ë¤¹¤ë¾ðÊó¤Ïrails¤ÎWeb¥µ¥¤¥È¡¢http://www.rubyonrails.org¤Ç¸«¤Ä¤«¤ë¡£
1.5 Resource Scaffolding
REST»Ø¸þ¤ÎRails³«È¯¤Ï¡¢¿·¤·¤¤scaffold¥¸¥§¥Í¥ì¡¼¥¿¤Ç¤¢¤ëscaffold resource¤«¤éºîÀ®¤µ¤ì¤ë¡¢¥ê¥½¡¼¥¹¡ÖProject¡×¤È¤È¤â¤Ë´Êñ¤ËÉÁ¤¯¤³¤È¤¬¤Ç¤¤ë¡£
¥¸¥§¥Í¥ì¡¼¥¿¤Ï¡¢¥ê¥½¡¼¥¹Ì¾¤Ç¤¢¤ë¡Öproject¡×¤È¤¤¤¦¥Ñ¥é¥á¡¼¥¿¤È¥ª¥×¥·¥ç¥Ê¥ë¤Ê¥â¥Ç¥ë¤Î°À¤Î¥ê¥¹¥È¤È¡¢¤½¤ì¤é¤Î¥¿¥¤¥×¤òÍ¿¤¨¤é¤ì¤ë
¤³¤ì¤é¤Î°À¤Ï¥Ç¡¼¥¿¥Ù¡¼¥¹¤Î¥Þ¥¤¥°¥ì¡¼¥·¥ç¥ó¥¹¥¯¥ê¥×¥È¤È¡¢ºîÀ®¤µ¤ì¤ë¥Ó¥å¡¼¤Îappropriate¥Õ¥£¡¼¥ë¥É¤â¤Þ¤¿É¬ÍפȤµ¤ì¤ë¡£
ruby script/generate scaffold_resource project name:string desc:text
exists app/controllers/ exists app/helpers/ create app/views/projects exists test/functional/ exists test/unit/ create app/views/projects/index.rhtml create app/views/projects/show.rhtml create app/views/projects/new.rhtml create app/views/projects/edit.rhtml create app/views/layouts/projects.rhtml create public/stylesheets/scaffold. create app/models/project.rb create app/controllers/projects_controller. create test/functional/projects_controller_ create app/helpers/projects_helper. create test/unit/project_test.rb create test/fixtures/projects.yml create db/migrate create db/migrate/001_create_projects. route map.resources :projects
¥¸¥§¥Í¥ì¡¼¥¿¤Ï¥â¥Ç¥ë¤À¤±¤Ç¤Ê¤¯¡¢¥³¥ó¥È¥í¡¼¥é¡¢¥Ó¥å¡¼¤½¤·¤Æ¡¢µ¡Ç½Åª¤Ê¥Þ¥¤¥°¥ì¡¼¥·¥ç¥ó¥¹¥¯¥ê¥×¥È¤È¿·¤·¤¤¥Þ¥Ã¥Ô¥ó¥°¥¨¥ó¥È¥ê¡¡map.resources rojects ¤òconfig/routes.rb¤ÎÃæ¤Ë¡¢À¸À®¤·¤¿¡£
¤½¤ì¤Ï¡¢»ä¤¿¤Á¤Î¥³¥ó¥È¥í¡¼¥é¡¼¤¬Resultful¤ÊURL¤ËÂФ·¤Æ±þÅú¤Ç¤¤ë¤è¤¦¤Ê¥Þ¥Ã¥Ô¥ó¥°¤Î¥¨¥ó¥È¥ê¡¼¤À¡£
1.6 The Model
»ä¤¿¤Á¤ÏºÇ½é¤Ë¸À¤Ã¤¿¤è¤¦¤Ë¡¢REST¤Î¥ê¥½¡¼¥¹¤Ï¡¢¥³¥ó¥È¥í¡¼¥é¤È¥â¥Ç¥ë¤Î¥³¥ó¥Ó¥Í¡¼¥·¥ç¥ó¤Îʸ̮¤Ç¤¢¤ë¡£
¥â¥Ç¥ë¤Ï¡¢Ä̾ï¤ÎActiveRecord?::Base:¤ò·Ñ¾µ¤·¤¿ActiveRecord?¥¯¥é¥¹¤À¡£
class Project < ActiveRecord::Base end
¤Ê¤Î¤Ç¡¢¤â¤Ç¤ë¤Î¾ì¹ç¤Ï¡¢¤Ê¤Ë¤â¿·¤·¤¤¤³¤È¤ò³Ø¤Ö¤³¤È¤Ï¤Ê¤¤¡£
¤·¤«¤·¡¢¥Ç¡¼¥¿¥Ù¡¼¥¹¤Î¥Æ¡¼¥Ö¥ë¤òºî¤ë¤Î¤Ï˺¤ì¤Ê¤¤¤è¤¦¤Ë¡£
> rake db:migrate
1.7 The Controller
À¸À®¤µ¤ì¤¿ProjectsController?¤Ï¡¢Project¥ê¥½¡¼¥¹¤òÁàºî¤¹¤ë¤¹¤ë¡¢CRUD-Controller¤À¡£
¤³¤ì¤Ï¡¢¥³¥ó¥È¥í¡¼¥é¤ÏÀµ³Î¤Ë°ì¤Ä¤Î¥ê¥½¡¼¥¹¥¿¥¤¥×¤Ë°¤·¡¢»Í¤Ä¤ÎCRUD¤ÎÁàºî¤½¤ì¤¾¤ì¤ÎÀ߷פµ¤ì¤¿¥¢¥¯¥·¥ç¥ó¤òoffer¤¹¤ë¤³¤È¤ò°ÕÌ£¤¹¤ë¡£
class ProjectsController < ApplicationController # GET /projects # GET /projects.xml def index... # GET /projects/1 # GET /projects/1.xml def show... # GET /projects/new def new... # GET /projects/1;edit def edit... # POST /projects # POST /projects.xml def create... # PUT /projects/1 # PUT /projects/1.xml def update... end # DELETE /projects/1 # DELETE /projects/1.xml def destroy... end end
¤â¤·¡¢¤¢¤Ê¤¿¤¬À¸À®¤µ¤ì¤¿¥³¥ó¥È¥í¡¼¥é¤ò¤ß¤ë¤Ê¤é¡¢¿·¤·¤¤¥¹¥¿¥Ã¥Õ¤ò¤½¤³¤Ë¤Ï¤ß¤Ä¤±¤Ê¤¤¤À¤í¤¦¡£¤¹¤Ê¤ï¤Á¡¢¥×¥í¥¸¥§¥¯¥È¤òÀ¸À®¡¢¸¡º÷¡¢¹¹¿·¤¹¤ë¤¿¤á¤Î¥¢¥¯¥·¥ç¥ó¤¬¤¢¤ë¡£¥³¥ó¥È¥í¡¼¥é¤È¥¢¥¯¥·¥ç¥ó¤ÎξÊý¤Ï¡¢ºÇ½é¤Î¥°¥ì¡¼¥¹¤ÇÉáÄ̤˸½¤ì¤ë
¤·¤«¤·¡¢¤½¤ì¤é¤Ï¡¢HTTP Æ°»ì(?)¤Ë¤è¤Ã¤Æ´Þ¤Þ¤ì¤ë¥ê¥¯¥¨¥¹¥ÈURL¤Î´ØÏ¢¤òɽ¼¨¤¹¤ë¡¢À¸À®¤µ¤ì¤¿¥³¥á¥ó¥È¤ò¤â¤Ã¤Æ¤¤¤ë
¤½¤³¤Ë¤ÏREST-URL¤¬¤¢¤ê¡¢Ìʺݤ¿¤Á¤Ï¼¡¤Î¥»¥¯¥·¥ç¥ó¤Ç¾Ü¤·¤¯¸«¤Æ¤¤¤¯¡£
1.7.1 REST-URLs
- REST-URL¤Ï¡¢¤³¤ì¤Þ¤Ç¤Îralis¤Î¤è¤¦¤Ê controller/action/id¤Î·Á¼°¤Ç¤Ï¤Ê¤¤
- controller̾¤Î¤¢¤È¤ËID¤¬¤¯¤ë
/projects/1
- Action¤¬¤Ê¤¤¤¬¡¢¤½¤ì¤ÏHTTP Method¤Ç¤¤Þ¤ë
HTTP Verb REST-URL Action URL without REST GET /projects/1 show GET /projects/show/1 DELETE /projects/1 destroy GET /projects/destroy/1 PUT /projects/1 update POST /projects/update/1 POST /projects create POST /projects/create - URL¤ÏPOST°Ê³°¤Ï¤ß¤ó¤ÊƱ¤¸¡£POST¤Î¾ì¹ç¤Ï¡¢¿·µ¬¤ËºîÀ®¤À¤«¤é¡¢¤Þ¤ÀID¤¬·è¤Þ¤Ã¤Æ¤¤¤Ê¤¤
- Web¥Ö¥é¥¦¥¶¤ÏDELETE¤ÈPUT¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Ê¤¤
- Rails¤Ï¡¢¥ê¥½¡¼¥¹¤òºï½ü¤¹¤ë¤¿¤á¤Î¥ê¥ó¥¯¤òÀ¸À®¤¹¤ë¤¿¤á¤ÎÆüì¤Ê¥Ø¥ë¥Ñ¡¼¤òÄ󶡤·¤Þ¤¹
- POST¥ê¥¯¥¨¥¹¥È¤Îhidden¥Õ¥£¡¼¥ë¥É¤Ç¥µ¡¼¥Ð¡¼¤ÇDELETE¥á¥½¥Ã¥É¤ËÊÑ´¹¤µ¤ì¤ë(1.8.3¤ÇÀâÌÀ)
- PUT¥ê¥¯¥¨¥¹¥È¤âƱÍÍ(1.8.2¤ÇÀâÌÀ)
1.7.2 REST actions are using respond to
- REST action¤Ï¤³¤È¤Ê¤ë¥ì¥¹¥Ý¥ó¥¹¥Õ¥©¡¼¥Þ¥Ã¥È¤Ç¡¢¤³¤È¤Ê¤ë¥¯¥é¥¤¥¢¥ó¥È¥¿¥¤¥×¤ËÈ¿±þ¤¹¤ë¤³¤È¤¬¤Ç¤¤ë
- Web ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Î¤¿¤á¤Îŵ·¿Åª¥¯¥é¥¤¥¢¥ó¥È¥¿¥¤¥×¤Ï¤â¤Á¤í¤ó¥Ö¥é¥¦¥¶¥¯¥é¥¤¥¢¥ó¥È¤Ç¤¢¤ë¤¬¡¢Web¥µ¡¼¥Ó¥¹¥¯¥é¥¤¥¢¥ó¥È¤ÏXML¤òͽ´ü¤¹¤ë¤·¡¢RSS¥ê¡¼¥À¡¼¤ÏRSS¤äAtom¥Õ¥©¡¼¥Þ¥Ã¥È¤òͽ´ü¤¹¤ë
- ¥¯¥é¥¤¥¢¥ó¥È¤Ë¤è¤Ã¤Æ¥ê¥¯¥¨¥¹¥È¤µ¤ì¤¿²óÅú¥Õ¥©¡¼¥Þ¥Ã¥È¤ÎÀ¸À®¤Î¤¿¤á¤ÎÃæ±û¤Î¥³¥ó¥È¥í¡¼¥ë¥¤¥ó¥¹¥¿¥ó¥¹¤Ï¡¢respond to¥á¥½¥Ã¥É¤Ç¤¢¤ë¡£¤³¤ì¤Ï¡¢¤¹¤Ç¤Ë¡¢scafforldgenerater¤Ë¤è¤Ã¤Æ¡¢CRUD¥¢¥¯¥·¥ç¥ó¤ÎÃæ¤Ë¡¢À¸À®¤µ¤ì¤Æ¤¤¤ë¡£
¼¡¤Î¥³¡¼¥É¤ÎÃÇÊÒ¤Ïshow¥¢¥¯¥·¥ç¥ó¤Ç¤Îrespond_to¤ÎÍøÍÑÎã¤À# GET /projects/1 # GET /projects/1.xml def show @project = Project.find(params[:id]) respond_to do |format| format.html # show.rhtml format.xml { render :xml => @project.to_xml } end end
- respond to¤Ï¥Õ¥©¡¼¥Þ¥Ã¥È¤òÆÃÄꤷ¤¿»Ø¼¨¤ò¤È¤â¤Ê¤¦¥Ö¥í¥Ã¥¯¤ò»ý¤Ã¤Æ¤¤¤ë
- Îã¤Ç¤Ï¡¢Æó¤Ä¤Î¥Õ¥©¡¼¥Þ¥Ã¥È¤ò½èÍý¤·¤Æ¤¤¤ë: HTML, XML
- ¤Ê¤Ë¤âµ¯¤³¤é¤Ê¤±¤ì¤Ðshow.rhtml¤ò»È¤Ã¤¿HTML¤¬¤«¤¨¤ë
- ¤â¤·¡¢¥Õ¥©¡¼¥Þ¥Ã¥È¤¬XML¤Ê¤éXML¤¬ÊÖ¤ë
- respond_to¤ÏacceptHTTP¥Ø¥Ã¥À¤Îaccept¥Õ¥£¡¼¥ë¥É¤«¡¢URL¤Î½ñ¼°(³ÈÄ¥»Ò¤Ê¤É)¤ÇȽÄꤹ¤ë
1.7.3 Accept-Field of the HTTP-Header
- ¡Öcurl¡×¥³¥Þ¥ó¥É¤ò»È¤¦¤È¡¢HTTP¥Ø¥Ã¥À¤¬´Êñ¤ËÁàºî¤Ç¤¤ë
- Accept¥Ø¥Ã¥À¤Ëapplication/xml¤ò»ØÄꤷ¤Æ¡¢GET¤·¤Æ¤ß¤ë
curl -H "Accept: application/xml" -i -X GET http://okra.ark-web.jp/~shida/sandbox/restful_rails/projects
1.7.4 Format specification via the URL
- ¼¡¤ÎURL¤ÇXMLɽ¸½¤òÍ×µá¤Ç¤¤ë
http://localhost:3000/projects/1.xml
1.8 REST-URLs and Views
- link_to¤ÏREST URL¤ËÂбþ¤·¤Ê¤¤
- link¤È¥Ü¥¿¥ó¤Ë¤è¤Ã¤Æ¡¢HTTP ¥á¥½¥Ã¥É¤ÈURL¤òÁ÷¿®¤Ç¤¤ë¤³¤È¤¬½ÅÍ×
- Path¥á¥½¥Ã¥É¤ò¸Æ¤Ö¤³¤È¤Çhash¤¬ÃÖ¤´¹¤¨¤é¤ì¤ë
- controller ¤Èaction¤Èproject_id¤ÎÂؤï¤ê¤Ëproject path(:id) ¤¬ÍøÍѤµ¤ì¤ë
link_to "Show", project_path(project) => <a href="/projects/1">Show</a>
- URL¤¬REST URL¤Ë¤Ê¤Ã¤Æ¤¤¤ë
- ¥Ç¥Õ¥©¥ë¥È¤Ç¤ÏGET
- ¡ÖTable 1.2: Standard Path-Methods¡×¤Ë¤¢¤ë¤è¤¦¤Ë¡¢¥ê¥½¡¼¥¹¤´¤È¤Ë¡¢Rails¤Ï7¤Ä¤Îɸ½àŪ¤Ê¥ê¥ó¥¯¤òÀ¸À®¤¹¤ë
- ¤½¤ì¤¾¤ì¤Î¥Ñ¥¹¥á¥½¥Ã¥É¤ÏHTTP¥á¥½¥Ã¥É¤Èassociated¤µ¤ì¡¢link¤ä¥Ü¥¿¥ó¤ò¥¯¥ê¥Ã¥¯¤¹¤ë¤È¡¢¥µ¡¼¥Ð¡¼¤ØÁ÷¤é¤ì¤ëHTTP¥á¥½¥Ã¥É¤Ç¤¢¤ë¤³¤È¤ò°ÕÌ£¤¹¤ë
- show¤Èupdate¤Ï¡¢GET¤ÈPOST¤Ê¤Î¤Ç¤½¤Î¤Þ¤Þ
- create¤Èdelete¤Ï¡¢hidden ¥Õ¥£¡¼¥ë¥É¤ò»È¤Ã¤¿¡¢Æüì¤ÊÊýË¡¤Ç¼è¤ê°·¤ï¤ì¤ëɬÍפ¬¤¢¤ë¡£¥Ö¥é¥¦¥¶¤ÏPUT, DELETE¤Ï²ò¼á¤Ç¤¤Ê¤¤¤¿¤á
Path-Method HTTP verb Path Requested Action projects_path GET /projects index project_path(1) GET /projects/1 show new_project_path GET /projects/new new edit_project_path(1) GET /projects/1;edit edit projects_path POST /projects create project_path(1) PUT /projects/1 update project_path(1) DELETE /projects/1 destroy - ɽ¤ÎºÇ½é¤ÎÆó¤Ä¤Ï¥ª¥Ã¥±¡¼
- new_project_path¤Èedit_project_path¤Ï¡¢REST URL¤È¥Þ¥Ã¥Á¤·¤Ê¤¤
1.8.1 New and Edit
- New-Link¤ò¥¯¥ê¥Ã¥¯¤¹¤ë¤ÈGET¤Ç¥µ¡¼¥Ð¡¼¤ËÁ÷¿®¤µ¤ì¤ë
link_to "New", new_project_path => <a href="/projects/new">New</a>
- ¤³¤ì¤ÏREST¤Îů³Ø¤ò²õ¤¹¤«? new¤ÏCRUD¥¢¥¯¥·¥ç¥ó¤Ç¤Ï¤Ê¤¤¡£¤³¤ì¤Ï¥ê¥½¡¼¥¹¤òÀ¸À®¤¹¤ë¤¿¤á¤Î½àÈ÷¤Ç¤¢¤ë¡£
- new¥Õ¥©¡¼¥à¤ÏºÇ½ªÅª¤Ë¥µ¥Ö¥ß¥Ã¥È¤µ¤ì¤ë»þ¡¢¤Ï¤¸¤á¤ÆCRUD¤Îcreate¥¢¥¯¥·¥ç¥ó¤¬¼Â¹Ô¤µ¤ì¤ë
- ¤³¤Î¥¢¥¯¥·¥ç¥ó¤Ïnew¥Õ¥©¡¼¥à¤òɽ¼¨¤¹¤ë»þ¤À¤±»ÈÍѤµ¤ì¤ë
- edit_project_path¥á¥½¥Ã¥É¤âƱÍÍ¡£CRUD¥¢¥¯¥·¥ç¥ó¤Îupdate¤Î½àÈ÷¤Î¤¿¤á¤Ë»ÈÍѤµ¤ì¤ë
- edit¥Õ¥©¡¼¥à¤ò¥µ¥Ö¥ß¥Ã¥È¤µ¤ì¤¿»þ¤Ë¼ÂºÝ¤Îupdate¥¢¥¯¥·¥ç¥ó¤¬¼Â¹Ô¤µ¤ì¤ë
- À¸À®¤µ¤ì¤ëhref°À¤Ï¼¡¤Î¤è¤¦¤Ê¤â¤Î
edit_project_path¤Ènew_project_path¤Î°ã¤¤¤Ïid¤¬É¬Íפ«¤É¤¦¤« link_to "Edit", edit_project_path(project) => <a href="/projects/1;edit">Edit</a>
- REST/CRUD¤Ç¤Ï¤Ê¤¤¤Î¤Ç¡¢new¤âedit¤âURL¤ÎÃæ¤Ë¥¢¥¯¥·¥ç¥ó¤¬Æþ¤ë¤Î¤ÏÌäÂê¤Ê¤¤
- ¤³¤Î¸¶Â§¤Ïɸ½à¤ÎCRUD¤Ç¤Ï¤Ê¤¤¥¢¥¯¥·¥ç¥ó¤Î̾Á°¤ò³«È¯¤¹¤ë»þ¤âÍøÍѤǤ¤ë
1.8.2 Path-Methods in forms: Create and Update
- REST¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ç¤Ï¡¢form_for¤äform_tag¤ÎURL¥Ï¥Ã¥·¥å¤Ï¡¢path¥á¥½¥Ã¥É¤ËÃÖ¤´¹¤¨¤é¤ì¤ë
- new¥Õ¥©¡¼¥à¤Î¤¿¤á¤Ëproject_path¤ÏÍøÍѤµ¤ì¤ë
- edit¥Õ¥©¡¼¥à¤Î¤¿¤á¤Ëproject_path(:id)¤ÏÍøÍѤµ¤ì¤ë
The New Form
- °ìÈÌŪ¤ÊPOST¤Ç¥µ¡¼¥Ð¡¼¤ËÁ÷¿®¤µ¤ì¤ë
- ID¤Ê¤·¤Îproject_path¤Ï/projects¤Ë¤Ê¤ë
form_for(:project, :url => projects_path) do |f| ... => <form action="/projects" method="post">
The Edit Form
- REST