<?xml version="1.0" encoding="UTF-8"?>
<page xmlns="http://api.springnote.com">
  <identifier type="integer">344939</identifier>
  <title>DevDay-RubyTutorialSession</title>
  <relation_is_part_of type="integer">325030</relation_is_part_of>
  <date_modified type="datetime">2007-10-02T02:01:43Z</date_modified>
  <uri>http://jasonpa.springnote.com/pages/344939</uri>
  <date_created type="datetime">2007-07-03T07:37:24Z</date_created>
  <source>&lt;blockquote&gt;
&lt;p&gt;&lt;span class="postbody"&gt;&lt;strong&gt;&#53916;&#53664;&#47532;&#50620;1 - [&#47704;&#53664;:&#44053;&#47928;&#49885;, &#50976;&#51648;&#47564;] Ruby&#48152; - &#49464;&#48120;&#45208;&#47352;#4&lt;/strong&gt;&lt;br /&gt;
- &#52572;&#51333;&#52280;&#44032;&#51088;: 10&#47749; - &lt;strong&gt;&#45216;&#44060;, &#44608;&#49457;&#50504;, &#48652;&#47336;&#54172;&#49884;&#47101;, &#50864;&#51452;, &#53944;&#50948;&#45768;, Celeste, Dano, iron, Raven, &#51060;&#46160;&#50896;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;&#52280;&#44256;&#51088;&#47308;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;&#47553;&#53356;&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/jasonpa/devda" title="http://del.icio.us/jasonpa/devda" class="external"&gt;&lt;/a&gt;&lt;a href="http://del.icio.us/jasonpa/devday" title="http://del.icio.us/jasonpa/devday" class="external"&gt;http://del.icio.us/jasonpa/devday&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;&#47928;&#49436;&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://jasonpa.springnote.com/pages/344939/attachments/141810" title="REST-cheatsheet.pdf" class="external"&gt;REST-cheatsheet.pdf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jasonpa.springnote.com/pages/344939/attachments/141811" title="rest.pdf&amp;nbsp;" class="external"&gt;rest.pdf&amp;nbsp;&amp;nbsp;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jasonpa.springnote.com/pages/344939/attachments/141809" title="REST_ARes.pdf" class="external"&gt;REST_ARes.pdf&lt;/a&gt;&lt;a href="/pages/344939/attachments/141809" title="REST_ARes.pdf" class="attachment"&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;&#49548;&#49828;&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="http://jasonpa.springnote.com/pages/344939/attachments/141878" title="snote.tar.gz" class="external"&gt;snote.tar.gz&lt;/a&gt;&lt;/strong&gt;&amp;nbsp; (vendor/rails &#47484; &#51228;&#50808;&#54620; &#49548;&#49828;&#51077;&#45768;&#45796;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;&#49480;&#54540; &#50612;&#54540;&#47532;&#52992;&#51060;&#49496; &#47564;&#46308;&#44592; (with ActiveResource)&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;&#47785;&#54364; :&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin-left: 1em;"&gt;&lt;strong&gt;ActiveRecord &#47484; &#49324;&#50857;&#54616;&#51648; &#50506;&#44256; ActiveRecord &#51032; REST &#48260;&#51260;&#51060;&#46972;&#44256; &#54624; &#49688; &#51080;&#45716; ActiveResource &#47564;&#51012; &#49324;&#50857;&#54644;&#49436; &#49828;&#54532;&#47553;&#45432;&#53944;&#51032; &#54168;&#51060;&#51648;&#47484; &#45796;&#47344; &#49688; &#51080;&#45716; &#44172;&#49884;&#54032;&#51012; &#47564;&#46308;&#50612; &#48376;&#45796;.&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;step1 &#50612;&#54540;&#47532;&#52992;&#51060;&#49496; &#49373;&#49457;&lt;/h4&gt;
&lt;ol class="code"&gt;
&lt;li&gt;&lt;strong&gt;&amp;gt; rails snote&lt;br /&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;gt; cd snote&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;step2 EdgeRails&lt;/h4&gt;
&lt;ol class="code"&gt;
&lt;li&gt;&lt;strong&gt;&amp;gt; svn co http://svn.rubyonrails.org/rails/trunk vendor/rails&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Edge Rails &#46976; &#47112;&#51068;&#49828; &#52572;&#49888; &#44060;&#48156;&#49548;&#49828;&#47484; &#51032;&#48120;&#54632;.&lt;/p&gt;
&lt;div&gt;
&lt;p&gt;(&#52280;&#44256;) vendor/rails &#46356;&#47113;&#53664;&#47532;&#50640; &#52572;&#49888;&#51032; &#47112;&#51068;&#49828; &#49548;&#49828;&#47484; &#45236;&#47140;&#48155;&#51004;&#47732; Edge &#47196; &#44060;&#48156;&#54616;&#45716; &#54872;&#44221;&#51060; &#44054;&#52628;&#50612; &#51652;&#45796;.&lt;/p&gt;
&lt;ol class="code"&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;vendor/rails/railties/lib/initializer.rb&lt;/strong&gt; &#50640; &#50500;&#47000;&#50752; &#44057;&#51008; &#47700;&#49548;&#46300;&#44032; &#51316;&#51116;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;def framework_root_path&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;defined?(::RAILS_FRAMEWORK_ROOT) ? ::RAILS_FRAMEWORK_ROOT : "#{root_path}/vendor/rails"&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;end&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;h4&gt;step3 &#50724;&#54536;&#47560;&#47336; &#51064;&#51613;&#49468;&#53440;&#47484; &#53685;&#54644;&#49436; &#51064;&#51613;&#54616;&#44592;&lt;/h4&gt;
&lt;p&gt;&#51064;&#51613;&#53412; &#48155;&#44592; : &lt;a href="http://dev.springnote.com/pages/334513" class="external" title="&#46020;&#50880;&#47568;"&gt;&#46020;&#50880;&#47568;&lt;/a&gt; &#52280;&#51312;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h5&gt;step3.1 &#47112;&#51068;&#49828; &#54872;&#44221;&#49444;&#51221; &#49688;&#51221;&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;config/springnote.yml&lt;/strong&gt; &#54028;&#51068; &#49373;&#49457;&#54980; &#50500;&#47000;&#50752; &#44057;&#51008; &#51221;&#48372; &#52628;&#44032;.&lt;/p&gt;
&lt;ol class="code"&gt;
&lt;li&gt;
&lt;p&gt;springnote:&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;nbsp; open_id: &#51088;&#49888;&#51032;&#50724;&#54536;&#50500;&#51060;&#46356;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;nbsp; user_key: &#51064;&#51613;&#49468;&#53440;&#47484;&#53685;&#54644;&#48155;&#51008;&#50976;&#51200;&#53412;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;nbsp; app_key: &#51064;&#51613;&#49468;&#53440;&#47484;&#53685;&#54644;&#48155;&#51008;&#50612;&#54540;&#47532;&#52992;&#51060;&#49496;&#53412;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;step4 Scaffold &#47484; &#51060;&#50857;&#54644;&#49436; &#47784;&#45944;, &#52968;&#53944;&#47204;&#47084;, &#48624; &#49373;&#49457;&lt;/h4&gt;
&lt;ol class="code"&gt;
&lt;li&gt;&lt;strong&gt;&amp;gt; script/generate scaffold page title:string source:text&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;step5 ActiveRecord &#47484; &#49324;&#50857;&#54616;&#51648; &#50506;&#46020;&#47197; &#49444;&#51221; / &#54056;&#52824;&lt;/h4&gt;
&lt;h5&gt;step5.1 config/environment.rb &#54028;&#51068; &#49688;&#51221;&lt;/h5&gt;
&lt;p&gt;ActiveRecord &#47484; &#49324;&#50857;&#54616;&#51648; &#50506;&#46020;&#47197; &#49444;&#51221;&lt;/p&gt;
&lt;ol class="code"&gt;
&lt;li&gt;&lt;strong&gt;config.frameworks -= [ :active_record ]&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&#54596;&#49688; &#49464;&#49496; &#51221;&#51032; &#54596;&#50836;&lt;em class="highlight" style="background-color: rgb(251, 189, 176);"&gt;&lt;br /&gt;&lt;/em&gt;&lt;/p&gt;
&lt;ol class="code"&gt;
&lt;li&gt;&lt;strong&gt;config.action_controller.session = {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; :session_key =&amp;gt; "_board_session",&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; :secret =&amp;gt; "some secret phrase"&lt;br /&gt;
}&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&#49828;&#54532;&#47553;&#45432;&#53944; API &#51064;&#51613;&#50640; &#54596;&#50836;&#54620; &#49444;&#51221; &#54028;&#51068; &#45236;&#50857; &#47196;&#46377; (springnote.yml)&lt;/p&gt;
&lt;ol class="code"&gt;
&lt;li&gt;&lt;strong&gt;CONFIG = YAML::load_file("#{RAILS_ROOT}/config/springnote.yml")&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;(&#52280;&#44256; : &#44060;&#48156;&#54872;&#44221;&#50640;&#49436; &#49345;&#49464;&#54616;&#44172; &#50640;&#47084;&#47700;&#49884;&#51648;&#47484; &#45224;&#44592;&#46020;&#47197; &#49444;&#51221;) : &lt;strong&gt;config/environmants/development.rb&lt;/strong&gt; &#54028;&#51068;&#45236;&#50857;&#51473; &#50500;&#47000;&#50752; &#44057;&#51060; &#49688;&#51221;&lt;/p&gt;
&lt;ol class="code"&gt;
&lt;li&gt;&lt;strong&gt;config.whiny_nils = false # &#50896;&#47000;&#45716; true&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;step6 Monkey Patch&lt;/h4&gt;
&lt;p&gt;lib/initializer.rb &#51089;&#49457;&lt;/p&gt;
&lt;ol class="code"&gt;
&lt;li&gt;&lt;strong&gt;module Rails&lt;br /&gt;
&amp;nbsp; class Initializer&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; # Thanks to http://dev.rubyonrails.org/ticket/6795&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; def load_observers&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return unless configuration.frameworks.include?(:active_record)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ActiveRecord::Base.instantiate_observers&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; end&lt;br /&gt;
&amp;nbsp; end&lt;br /&gt;
end&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;config/environment.rb &#54028;&#51068;&#50640; monkey_patch &#54620; &#46972;&#51060;&#48652;&#47084;&#47532; &#54028;&#51068; &#47196;&#46377;&#54616;&#46020;&#47197; &#49688;&#51221;&lt;/p&gt;
&lt;ol class="code"&gt;
&lt;li&gt;&lt;strong&gt;require 'lib/initializer.rb'&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;step7 &#52968;&#53944;&#47204;&#47084; &#49688;&#51221; (app/controller/pages_controller.rb)&lt;/h4&gt;
&lt;ol class="code"&gt;
&lt;li&gt;&lt;strong&gt;class PagesController &amp;lt; ApplicationController&lt;br /&gt;
&amp;nbsp; before_filter :update_site&lt;br /&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;......&lt;br /&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;nbsp; private&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;nbsp; def update_site&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; user_id = CGI.escape(CONFIG['springnote']['open_id'])&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; password = [ CONFIG['springnote']['user_key'],&amp;nbsp;CONFIG['springnote']['app_key'] ].join(".")&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Page.site = "http://#{user_id}:#{password}@api.springnote.com/"&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;nbsp; end&amp;nbsp;&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;step8 &#47784;&#45944; &#49688;&#51221; (app/model/page.rb)&lt;/h4&gt;
&lt;ol class="code"&gt;
&lt;li&gt;&lt;strong&gt;class Page &amp;lt; ActiveResource::Base&lt;br /&gt;
&amp;nbsp; set_primary_key 'identifier'&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&amp;nbsp; def to_param&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; identifier.to_s&lt;br /&gt;
&amp;nbsp; end&lt;br /&gt;
end&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;step9 &#48624; &#49688;&#51221; (app/views/pages/show.html.erb)&lt;/h4&gt;
&lt;ol class="code"&gt;
&lt;li&gt;&lt;strong&gt;&amp;lt;p&amp;gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;nbsp; &amp;lt;b&amp;gt;Title:&amp;lt;/b&amp;gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;nbsp; &amp;lt;%=h @page.title %&amp;gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;lt;/p&amp;gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;lt;p&amp;gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;nbsp; &amp;lt;b&amp;gt;Source:&amp;lt;/b&amp;gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;nbsp; &amp;lt;%=h @page.source %&amp;gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;lt;/p&amp;gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;lt;p&amp;gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;lt;%=@page.source %&amp;gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;lt;/p&amp;gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;lt;%= link_to 'Edit', edit_page_path(@page) %&amp;gt; |&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;lt;%= link_to 'Back', pages_path %&amp;gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;step10 &#50629;&#45936;&#51060;&#53944; &#50724;&#47448; &#54644;&#44208;&lt;/h4&gt;
&lt;p&gt;app/conteollers/page_controller.rb &#50640;&#49436; update &#48512;&#48516;&#51012; &#49688;&#51221;&#54616;&#47732; &#46120;.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # ActiveResource &#50640;&#45716; update_attributes &#44032; &#44396;&#54788;&#51060; &#50504;&#46104;&#50612;&#51080;&#45796;. &#46412;&#47928;&#50640; &#50500;&#47000;&#50752; &#44057;&#51060; &#49688;&#51221;&#54616;&#44256; &#47749;&#49884;&#51201;&#51004;&#47196; save &#47484; &#54840;&#52636;&#54644;&#51452;&#47732; &#46120;.&lt;/p&gt;
&lt;ol class="code"&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&amp;nbsp; def update&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @page = Page.find(params[:id])&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; respond_to do |format|&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: rgb(255, 0, 0);"&gt;params[:page][:identifier] = params[:id]&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: rgb(255, 0, 0);"&gt;if @page.attributes = params[:page]&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @page.save&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; flash[:notice] = 'Page was successfully updated.'&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; format.html { redirect_to(@page) }&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; format.xml&amp;nbsp; { head :ok }&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; format.html { render :action =&amp;gt; "edit" }&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; format.xml&amp;nbsp; { render :xml =&amp;gt; @page.errors, :status =&amp;gt; :unprocessable_entity }&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&amp;nbsp; end&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;&#44592;&#53440; : &#47112;&#51068;&#49828; &#53080;&#49556; &#49324;&#50857; &#44288;&#47144;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;&#44060;&#48156;&#54872;&#44221; &#47112;&#51068;&#49828; &#53080;&#49556; &#49892;&#54665; : script/console&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&#53080;&#49556;&#49345;&#50640;&#49436; &#50500;&#47000;&#50752; &#44057;&#51060; &#54620;&#51460;&#50473; &#51077;&#47141;&#54644;&#48372;&#44256; &#45208;&#50724;&#45716; &#44208;&#44284;&#47484; &#52280;&#44256;&#54644;&#48372;&#51088;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol class="code"&gt;
&lt;li&gt;&lt;strong&gt;&amp;gt;&amp;gt; app.class&lt;br /&gt;
&amp;gt;&amp;gt; app.get "/pages/&#54168;&#51060;&#51648;&#48264;&#54840;"&lt;br /&gt;
&amp;gt;&amp;gt; app.get "/pages"&lt;br /&gt;
&amp;gt;&amp;gt; app.response.body&lt;br /&gt;
&amp;gt;&amp;gt; app.cookies&lt;br /&gt;
&amp;gt;&amp;gt; helper.text_field_tag :foo&lt;br /&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;gt;&amp;gt; app.methods.grep(/_path$/).sort&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;gt;&amp;gt; _&amp;nbsp;&amp;nbsp;&amp;nbsp; (&#47560;&#51648;&#47561; &#50500;&#50883;&#54411;&#51012; &#48372;&#50668;&#51468;)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;gt;&amp;gt; y _&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;&#44592;&#53440;2 : &#50641;&#54000;&#48652;&#47532;&#49548;&#49828; &#52280;&#44256;&lt;/h3&gt;
&lt;h5&gt;&#50724;&#47448;&#53076;&#46300;&lt;/h5&gt;
&lt;p style="margin-left: 1em;"&gt;&lt;strong&gt;200 - 399&lt;/strong&gt;:: Valid response, no exception&lt;br /&gt;
&lt;strong&gt;404&lt;/strong&gt;:: ActiveResource::ResourceNotFound&lt;br /&gt;
&lt;strong&gt;409&lt;/strong&gt;:: ActiveResource::ResourceConflict&lt;br /&gt;
&lt;strong&gt;422&lt;/strong&gt;:: ActiveResource::ResourceInvalid (rescued by save as validation errors)&lt;br /&gt;
&lt;strong&gt;401 - 499&lt;/strong&gt;:: ActiveResource::ClientError&lt;br /&gt;
&lt;strong&gt;500 - 599&lt;/strong&gt;:: ActiveResource::ServerError&lt;/p&gt;
&lt;h5&gt;&lt;strong&gt;Table 1.1: HTTP Verbs and REST-URLs&lt;/strong&gt;&lt;/h5&gt;
&lt;table class="datatable"&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;HTTP Verb&lt;/th&gt;
&lt;th&gt;REST-URL&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;URL without REST&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GET&lt;/td&gt;
&lt;td&gt;/projects/1&lt;/td&gt;
&lt;td&gt;show&lt;/td&gt;
&lt;td&gt;GET /projects/show/1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DELETE&lt;/td&gt;
&lt;td&gt;/projects/1&lt;/td&gt;
&lt;td&gt;destroy&lt;/td&gt;
&lt;td&gt;GET /projects/destroy/1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PUT&lt;/td&gt;
&lt;td&gt;/projects/1&lt;/td&gt;
&lt;td&gt;update&lt;/td&gt;
&lt;td&gt;POST /projects/update/1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;POST&lt;/td&gt;
&lt;td&gt;/projects&lt;/td&gt;
&lt;td&gt;create&lt;/td&gt;
&lt;td&gt;POST /projects/create&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h5&gt;Table 1.2: Standard Path methods&lt;/h5&gt;
&lt;table class="datatable"&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Path Method&lt;/th&gt;
&lt;th&gt;HTTP Verb&lt;/th&gt;
&lt;th&gt;Path&lt;/th&gt;
&lt;th&gt;Requested Action&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;projects_path&lt;/td&gt;
&lt;td&gt;GET&lt;/td&gt;
&lt;td&gt;/projects&lt;/td&gt;
&lt;td&gt;index&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;projects_path(1)&lt;/td&gt;
&lt;td&gt;GET&lt;/td&gt;
&lt;td&gt;/projects/1&lt;/td&gt;
&lt;td&gt;show&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;new_project_path&lt;/td&gt;
&lt;td&gt;GET&lt;/td&gt;
&lt;td&gt;/projects/new&lt;/td&gt;
&lt;td&gt;new&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;edit_project_path&lt;/td&gt;
&lt;td&gt;GET&lt;/td&gt;
&lt;td&gt;/projects/1;edit&lt;/td&gt;
&lt;td&gt;edit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;projects_path&lt;/td&gt;
&lt;td&gt;POST&lt;/td&gt;
&lt;td&gt;/projects&lt;/td&gt;
&lt;td&gt;create&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;projects_path(1)&lt;/td&gt;
&lt;td&gt;PUT&lt;/td&gt;
&lt;td&gt;/projects/1&lt;/td&gt;
&lt;td&gt;update&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;projects_path(1)&lt;/td&gt;
&lt;td&gt;DELETE&lt;/td&gt;
&lt;td&gt;/projects/1&lt;/td&gt;
&lt;td&gt;destroy&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h5&gt;REST Routing&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;config/routes.rb :&lt;/strong&gt;&lt;/p&gt;
&lt;ol class="code"&gt;
&lt;li&gt;&lt;strong&gt;map.resources :projects&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;map.resources :projects&lt;/strong&gt;&lt;/p&gt;
&lt;table class="datatable"&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Route&lt;/th&gt;
&lt;th&gt;Generated Helper&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;projects&lt;/td&gt;
&lt;td&gt;projects_url, projects_path&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;project&lt;/td&gt;
&lt;td&gt;project_url(id), project_path(id)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;new_project&lt;/td&gt;
&lt;td&gt;new_project_url, new_project_path&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;edit_project&lt;/td&gt;
&lt;td&gt;edit_project_url(id), edit_&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="text-align: right"&gt;&#51060; &#44544;&#51008; &lt;a href="http://jasonpa.springnote.com/pages/344939"&gt;&#49828;&#54532;&#47553;&#45432;&#53944;&lt;/a&gt;&#50640;&#49436; &#51089;&#49457;&#46104;&#50632;&#49845;&#45768;&#45796;.&lt;/p&gt;
</source>
  <rights nil="true"></rights>
  <creator>jasonpa</creator>
  <contributor_modified>jasonpa</contributor_modified>
  <version type="integer">104</version>
  <tags></tags>
</page>
