<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>netswitch!: Tag rails</title>
    <link>http://blog.netswitch.jp/articles/tag/rails</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description></description>
    <item>
      <title>&#27770;&#23450;&#29256;! Rails&#29992;&#30011;&#20687;&#28155;&#20184;&#12503;&#12521;&#12464;&#12452;&#12531;purl</title>
      <description>&lt;p&gt;Rails plugin&#12392;&#12375;&#12390;&#21205;&#12367;&#35328;&#35486;&#12289;purl&#12434;&#20844;&#38283;&#12375;&#12414;&#12375;&#12383;&#12290;&lt;/p&gt;

&lt;p&gt;purl &#12399;&#12463;&#12521;&#12452;&#12450;&#12531;&#12488;&#12469;&#12452;&#12489;&#12363;&#12425;&#26580;&#36575;&#12394;&#30011;&#20687;&#20966;&#29702;&#12434;&#34892;&#12358;&#12383;&#12417;&#12395;&#38283;&#30330;&#12373;&#12428;&#12414;&#12375;&#12383;&#12290;
&#12469;&#12512;&#12493;&#12452;&#12523;&#12398;&#29983;&#25104;&#12394;&#12393;&#12434;&#34892;&#12358;&#12503;&#12521;&#12464;&#12452;&#12531;&#12399;&#12356;&#12367;&#12388;&#12363;&#12354;&#12426;&#12414;&#12377;&#12364;&#12289;&#12381;&#12398;&#12393;&#12428;&#12424;&#12426;&#12418;&#24375;&#21147;&#12391;&#27726;&#29992;&#24615;&#12289;&#25313;&#24373;&#24615;&#12364;&#12354;&#12426;&#12414;&#12377;&#12290;&lt;/p&gt;

&lt;h2&gt;&#12475;&#12483;&#12488;&#12450;&#12483;&#12503;&lt;/h2&gt;

&lt;p&gt;Rails2.1&#20197;&#19978;&#12391;&#12399;&#12289;&lt;/p&gt;

&lt;div class="typocode"&gt;&lt;pre class='prettyprint'&gt;&lt;code class="typocode_default "&gt;$ script/plugin install git://github.com/nanki/purl.git&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&#12381;&#12428;&#26410;&#28288;&#12391;&#12399;&#12289;&lt;/p&gt;

&lt;div class="typocode"&gt;&lt;pre class='prettyprint'&gt;&lt;code class="typocode_default "&gt;$ git clone git://github.com/nanki/purl.git -- vendor/plugins/purl&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;git&#12364;&#28961;&#12356;&#29872;&#22659;&#12394;&#12425;&#12289;&lt;a href="http://github.com/nanki/purl/tree/master"&gt;github&lt;/a&gt;&#12398;download&#12363;&#12425;&#12501;&#12449;&#12452;&#12523;&#12434;&#33853;&#12392;&#12375;&#12390;&#12289;vendor/plugins/ &#12395;&#37197;&#32622;&#12375;&#12390;&#12367;&#12384;&#12373;&#12356;&#12290;&lt;/p&gt;

&lt;h3&gt;&#20381;&#23384;&#12521;&#12452;&#12502;&#12521;&#12522;&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&#24517;&#38920;: ImageMagick, rmagick&lt;/li&gt;
&lt;li&gt;&#12354;&#12387;&#12383;&#26041;&#12364;&#12356;&#12356;: cairo, rcairo&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;&#12381;&#12398;&#20182;&lt;/h3&gt;

&lt;p&gt;purl &#12398;&#12487;&#12501;&#12457;&#12523;&#12488;&#12398;&#29872;&#22659;&#12391;&#12399;&#12289;&#30011;&#20687;&#12398;&#20445;&#23384;&#12395;&#12487;&#12540;&#12479;&#12505;&#12540;&#12473;&#12434;&#21033;&#29992;&#12375;&#12414;&#12377;&#12290;
images&#12486;&#12540;&#12502;&#12523;&#12395;&#12289;blob&#22411;&#12398;data&#12459;&#12521;&#12512;&#12434;&#36861;&#21152;&#12375;&#12390;&#12367;&#12384;&#12373;&#12356;&#12290;&lt;/p&gt;

&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="comment"&gt;# app/models/image.rb&lt;/span&gt;
&lt;span class="keyword"&gt;class &lt;/span&gt;&lt;span class="class"&gt;Image&lt;/span&gt; &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt; &lt;span class="constant"&gt;ActiveRecord&lt;/span&gt;&lt;span class="punct"&gt;::&lt;/span&gt;&lt;span class="constant"&gt;Base&lt;/span&gt;
  &lt;span class="ident"&gt;attr_readonly&lt;/span&gt; &lt;span class="symbol"&gt;:data&lt;/span&gt;
&lt;span class="keyword"&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&#12381;&#12398;&#19978;&#12391;&#12289;ImageController#upload &#12394;&#12393;&#12395;&#20197;&#19979;&#12398;&#12424;&#12358;&#12395;&#35352;&#36848;&#12375;&#12414;&#12377;&#12290;&lt;/p&gt;

&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="comment"&gt;# app/controllers/image_controller.rb&lt;/span&gt;
&lt;span class="keyword"&gt;class &lt;/span&gt;&lt;span class="class"&gt;ImageController&lt;/span&gt; &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt; &lt;span class="constant"&gt;ApplicationController&lt;/span&gt;
  &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;upload&lt;/span&gt;
    &lt;span class="constant"&gt;Image&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;create&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="symbol"&gt;:data&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="ident"&gt;params&lt;/span&gt;&lt;span class="punct"&gt;[&lt;/span&gt;&lt;span class="symbol"&gt;:data&lt;/span&gt;&lt;span class="punct"&gt;].&lt;/span&gt;&lt;span class="ident"&gt;read&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;
  &lt;span class="keyword"&gt;end&lt;/span&gt;
&lt;span class="keyword"&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&#12373;&#12425;&#12395;&#12289;config/routes.rb&#12434;&#26360;&#12365;&#26367;&#12360;&#12289;purl &#12364;&#23455;&#34892;&#12373;&#12428;&#12427;&#12424;&#12358;&#12395;&#12375;&#12414;&#12377;&#12290;
&#26360;&#12367;&#22580;&#25152;&#12399;&#20808;&#38957;&#12395;&#36817;&#12356;&#26041;&#12364;&#12356;&#12356;&#12392;&#24605;&#12356;&#12414;&#12377;&#12290;&lt;/p&gt;

&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="comment"&gt;# config/routes.rb&lt;/span&gt;
  &lt;span class="ident"&gt;map&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;connect&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;purl/:commands&lt;/span&gt;&lt;span class="punct"&gt;',&lt;/span&gt;
    &lt;span class="symbol"&gt;:controller&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;purl&lt;/span&gt;&lt;span class="punct"&gt;',&lt;/span&gt; &lt;span class="symbol"&gt;:action&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;filter&lt;/span&gt;&lt;span class="punct"&gt;',&lt;/span&gt; &lt;span class="symbol"&gt;:commands&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;/&lt;/span&gt;&lt;span class="regex"&gt;.*&lt;/span&gt;&lt;span class="punct"&gt;/&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="comment"&gt;# app/controllers/purl_controller.rb&lt;/span&gt;
&lt;span class="keyword"&gt;class &lt;/span&gt;&lt;span class="class"&gt;PurlController&lt;/span&gt; &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt; &lt;span class="constant"&gt;ApplicationController&lt;/span&gt;
  &lt;span class="ident"&gt;caches_page&lt;/span&gt; &lt;span class="symbol"&gt;:filter&lt;/span&gt;

  &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;filter&lt;/span&gt;
    &lt;span class="keyword"&gt;begin&lt;/span&gt;
      &lt;span class="ident"&gt;result&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="constant"&gt;Purl&lt;/span&gt;&lt;span class="punct"&gt;::&lt;/span&gt;&lt;span class="constant"&gt;StackMachine&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;new&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;
        &lt;span class="ident"&gt;params&lt;/span&gt;&lt;span class="punct"&gt;[&lt;/span&gt;&lt;span class="symbol"&gt;:commands&lt;/span&gt;&lt;span class="punct"&gt;],&lt;/span&gt; &lt;span class="constant"&gt;Purl&lt;/span&gt;&lt;span class="punct"&gt;::&lt;/span&gt;&lt;span class="constant"&gt;Purl&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;new&lt;/span&gt;&lt;span class="punct"&gt;).&lt;/span&gt;&lt;span class="ident"&gt;run&lt;/span&gt;
      &lt;span class="ident"&gt;send_data&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;result&lt;/span&gt;&lt;span class="punct"&gt;[-&lt;/span&gt;&lt;span class="number"&gt;2&lt;/span&gt;&lt;span class="punct"&gt;],&lt;/span&gt; &lt;span class="symbol"&gt;:type&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="ident"&gt;result&lt;/span&gt;&lt;span class="punct"&gt;[-&lt;/span&gt;&lt;span class="number"&gt;1&lt;/span&gt;&lt;span class="punct"&gt;],&lt;/span&gt; &lt;span class="symbol"&gt;:disposition&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;inline&lt;/span&gt;&lt;span class="punct"&gt;')&lt;/span&gt;
    &lt;span class="keyword"&gt;rescue&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="ident"&gt;e&lt;/span&gt;
      &lt;span class="ident"&gt;render&lt;/span&gt; &lt;span class="symbol"&gt;:status&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="number"&gt;500&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="symbol"&gt;:text&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;error&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt;
    &lt;span class="keyword"&gt;end&lt;/span&gt;
  &lt;span class="keyword"&gt;end&lt;/span&gt;
&lt;span class="keyword"&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&#12381;&#12435;&#12394;&#12371;&#12435;&#12394;&#12391;&#12475;&#12483;&#12488;&#12450;&#12483;&#12503;&#12399;&#32066;&#12431;&#12426;&#12290;&lt;/p&gt;

&lt;h2&gt;&#35328;&#35486;&lt;/h2&gt;

&lt;p&gt;purl &#12399;URL&#19978;&#12391;&#35352;&#36848;&#12373;&#12428;&#12427;&#12371;&#12392;&#12434;&#21069;&#25552;&#12392;&#12375;&#12390;&#12356;&#12414;&#12377;&#12290;
&#24120;&#12395;&#12527;&#12531;&#12521;&#12452;&#12490;&#12540;&#12391;&#12354;&#12428;&#65281;&lt;/p&gt;

&lt;h3&gt;&#25991;&#27861;&lt;/h3&gt;

&lt;p&gt;purl &#12399;&#36870;&#12509;&#12540;&#12521;&#12531;&#12489;&#35352;&#27861;&#12434;&#25505;&#29992;&#12375;&#12390;&#12356;&#12414;&#12377;&#12290;
&#12487;&#12540;&#12479;&#12392;&#21629;&#20196;&#12434;&#26360;&#12363;&#12428;&#12383;&#38918;&#30058;&#12395;&#12473;&#12479;&#12483;&#12463;&#12510;&#12471;&#12531;&#12395;&#12503;&#12483;&#12471;&#12517;&#12375;&#12390;&#12356;&#12365;&#12289;&#21629;&#20196;&#12364;&#23455;&#34892;&#12373;&#12428;&#12383;&#32080;&#26524;&#12364;&#12473;&#12479;&#12483;&#12463;&#12510;&#12471;&#12531;&#19978;&#12395;&#12388;&#12414;&#12428;&#12390;&#12356;&#12365;&#12414;&#12377;&#12290;
&#21629;&#20196;&#21015;&#12399;&#26368;&#21021;&#12395;:&#12391;&#21306;&#20999;&#12425;&#12428;&#12289;&#25968;&#23383;&#12392;&#12375;&#12390;&#12497;&#12540;&#12473;&#12391;&#12365;&#12427;&#12418;&#12398;&#12399;&#25968;&#23383;&#12408;&#12289;()&#12391;&#22258;&#12431;&#12428;&#12383;&#37096;&#20998;&#12399;&#25991;&#23383;&#21015;&#12408;&#12392;&#22793;&#25563;&#12373;&#12428;&#12414;&#12377;&#12290;&lt;/p&gt;

&lt;h3&gt;&#12509;&#12522;&#12471;&#12540;&lt;/h3&gt;

&lt;p&gt;&#12487;&#12501;&#12457;&#12523;&#12488;&#12391;&#29992;&#24847;&#12373;&#12428;&#12427;&#20840;&#12390;&#12398;&#21629;&#20196;&#12399;&#12289;&#22806;&#37096;&#12398;&#20516;&#12395;&#20381;&#23384;&#12375;&#12414;&#12379;&#12435;&#12290;
&#12388;&#12414;&#12426;&#12289;&#21629;&#20196;&#21015;&#12364;&#27770;&#12414;&#12428;&#12400;&#23455;&#34892;&#32080;&#26524;&#12399;&#30906;&#23450;&#12375;&#12414;&#12377;&#12290;
&#12371;&#12398;&#12509;&#12522;&#12471;&#12540;&#12395;&#12424;&#12426;&#12289;&#20840;&#12390;&#12398;&#23455;&#34892;&#32080;&#26524;&#12364;&#12461;&#12515;&#12483;&#12471;&#12517;&#21487;&#33021;&#12395;&#12394;&#12426;&#12414;&#12377;&#12290;&lt;/p&gt;

&lt;h2&gt;&#12469;&#12531;&#12503;&#12523;&#12467;&#12540;&#12489;&lt;/h2&gt;

&lt;h3&gt;&#30011;&#20687;&#12434;&#12381;&#12398;&#12414;&#12414;&#34920;&#31034;&lt;/h3&gt;

&lt;p&gt;&#27425;&#12398;&#20363;&#12391;&#12399;&#12289;load &#12399;&#12473;&#12479;&#12483;&#12463;&#19978;&#12395;&#26082;&#12395;&#12354;&#12427;&#25968;&#23383;1&#12434;&#28040;&#36027;&#12375;&#12390;&#12289;ID=1&#12398;Image#data&#12434;&#12487;&#12540;&#12479;&#12505;&#12540;&#12473;&#12363;&#12425;&#12525;&#12540;&#12489;&#12375;&#12390;&#12289;&#12473;&#12479;&#12483;&#12463;&#19978;&#12395;&#12503;&#12483;&#12471;&#12517;&#12375;&#12414;&#12377;&#12290;
to.png &#12391;&#12399;&#12289;&#12473;&#12479;&#12483;&#12463;&#19978;&#12398;&#30011;&#20687;&#12487;&#12540;&#12479;&#12434;PNG&#24418;&#24335;&#12398;&#12496;&#12452;&#12488;&#21015;&#12395;&#22793;&#25563;&#12375;&#12289;mimetype&#12392;&#12392;&#12418;&#12395;&#12473;&#12479;&#12483;&#12463;&#19978;&#12395;&#31309;&#12415;&#12414;&#12377;&#12290;&lt;/p&gt;

&lt;div class="typocode"&gt;&lt;pre class='prettyprint'&gt;&lt;code class="typocode_default "&gt;/purl/1:load:to.png&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;img src="http://purl.netswitch.jp/purl/1:load:to.png" alt=""/&gt;&lt;/p&gt;

&lt;h3&gt;&#30011;&#20687;&#12398;&#24418;&#24335;&#12434;&#22793;&#25563;&lt;/h3&gt;

&lt;p&gt;&#27425;&#12398;&#20363;&#12391;&#12399;&#12289;&#30011;&#20687;&#12434;GIF&#24418;&#24335;&#12395;&#22793;&#25563;&#12375;&#12390;&#12356;&#12414;&#12377;&#12290;&lt;/p&gt;

&lt;div class="typocode"&gt;&lt;pre class='prettyprint'&gt;&lt;code class="typocode_default "&gt;/purl/1:load:to.gif&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;img src="http://purl.netswitch.jp/purl/1:load:to.gif" alt=""/&gt;&lt;/p&gt;

&lt;h3&gt;&#30011;&#20687;&#12398;&#12522;&#12469;&#12452;&#12474;&lt;/h3&gt;

&lt;p&gt;&#27425;&#12398;&#20363;&#12391;&#12399;&#12289;&#30011;&#20687;&#12434;100x100&#12395;&#12522;&#12469;&#12452;&#12474;&#12375;&#12390;&#12356;&#12414;&#12377;&#12290;
&#12522;&#12469;&#12452;&#12474;&#29992;&#12398;&#21629;&#20196;&#12399;&#12289;&#20309;&#31278;&#39006;&#12363;&#29992;&#24847;&#12373;&#12428;&#12390;&#12362;&#12426;&#12289;&#39640;&#12373;&#12434;&#19968;&#23450;&#12395;&#20445;&#12388; resize.height&#12420;&#12289;&#19978;&#38480;&#12434;&#25351;&#23450;&#12377;&#12427;&#12289;resize.upto &#12394;&#12393;&#12364;&#12354;&#12426;&#12414;&#12377;&#12290;&lt;/p&gt;

&lt;div class="typocode"&gt;&lt;pre class='prettyprint'&gt;&lt;code class="typocode_default "&gt;/purl/1:load:100:100:resize:to.png&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;img src="http://purl.netswitch.jp/purl/1:load:100:100:resize:to.png" alt=""/&gt;&lt;/p&gt;

&lt;h3&gt;&#30011;&#20687;&#12398;&#21512;&#25104;&lt;/h3&gt;

&lt;p&gt;&#27425;&#12398;&#20363;&#12391;&#12399;&#12405;&#12383;&#12388;&#12398;&#30011;&#20687;&#12434;&#21512;&#25104;&#12375;&#12390;&#12356;&#12414;&#12377;&#12290;&lt;/p&gt;

&lt;div class="typocode"&gt;&lt;pre class='prettyprint'&gt;&lt;code class="typocode_default "&gt;/purl/1:load:9:load:composite:to.png&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;img src="http://purl.netswitch.jp/purl/1:load:8:load:composite:to.png" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;&#27425;&#12398;&#20363;&#12391;&#12399;&#38918;&#30058;&#12434;&#20837;&#12428;&#26367;&#12360;&#12390;&#12356;&#12414;&#12377;&#12290;&lt;/p&gt;

&lt;div class="typocode"&gt;&lt;pre class='prettyprint'&gt;&lt;code class="typocode_default "&gt;/purl/1:load:9:load:swap:composite:to.png&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;img src="http://purl.netswitch.jp/purl/1:load:8:load:swap:composite:to.png" alt=""/&gt;&lt;/p&gt;

&lt;h3&gt;&#12467;&#12513;&#12531;&#12488;&lt;/h3&gt;

&lt;p&gt;&#12473;&#12479;&#12483;&#12463;&#12395;&#31309;&#12435;&#12384;&#24460;&#12377;&#12368;&#12395;pop&#12377;&#12427;&#12392;&#12289;&#21336;&#32020;&#12395;&#28961;&#35222;&#12373;&#12428;&#12427;&#12398;&#12391;&#12289;&#12467;&#12513;&#12531;&#12488;&#12392;&#12375;&#12390;&#20351;&#12360;&#12414;&#12377;&#12290;
&#12461;&#12515;&#12483;&#12471;&#12517;&#12398;&#12521;&#12452;&#12501;&#12469;&#12452;&#12463;&#12523;&#12467;&#12531;&#12488;&#12525;&#12540;&#12523;&#12394;&#12393;&#12395;&#20351;&#12360;&#12427;&#12392;&#24605;&#12356;&#12414;&#12377;&#12290;&lt;/p&gt;

&lt;div class="typocode"&gt;&lt;pre class='prettyprint'&gt;&lt;code class="typocode_default "&gt;/purl/1:load:(daily):pop:to.png&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&#22259;&#24418;&#12398;&#25551;&#30011;&lt;/h3&gt;

&lt;p&gt;&#35443;&#12375;&#12367;&#12399;&#35299;&#35500;&#12375;&#12414;&#12379;&#12435;&#12364;&#12289;&#35430;&#39443;&#30340;&#12395;cairo&#12398;&#25551;&#30011;&#27231;&#33021;&#12434;&#12505;&#12540;&#12473;&#12395;&#12375;&#12383;&#22259;&#24418;&#25551;&#30011;&#21629;&#20196;&#12434;&#29992;&#24847;&#12375;&#12390;&#12356;&#12414;&#12377;&#12290;
ctx&#21629;&#20196;&#12391;&#12289;&#25351;&#23450;&#12375;&#12383;&#12469;&#12452;&#12474;&#12398;cairo&#12467;&#12531;&#12486;&#12461;&#12473;&#12488;&#12434;&#28310;&#20633;&#12375;&#12289;xtc&#21629;&#20196;&#12391;&#23455;&#38555;&#12395;&#12469;&#12540;&#12501;&#12455;&#12540;&#12473;&#12408;&#12398;&#25551;&#30011;&#12434;&#23455;&#34892;&#12375;&#12414;&#12377;&#12290;&lt;/p&gt;

&lt;div class="typocode"&gt;&lt;pre class='prettyprint'&gt;&lt;code class="typocode_default "&gt;/purl/80:80:ctx:40:40:moveto:40:40:40:-20:20:arc.ccw:1:0.3:0:rgb:fill:60:20:4:circle:0:0:0:rgb:fill:xtc:to.png&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;img src="http://purl.netswitch.jp/purl/80:80:ctx:40:40:moveto:40:40:40:-20:20:arc.ccw:1:0.3:0:rgb:fill:60:20:4:circle:0:0:0:rgb:fill:xtc:to.png" alt=""/&gt;&lt;/p&gt;

&lt;h2&gt;&#21046;&#38480;&lt;/h2&gt;

&lt;p&gt;&#23455;&#34892;&#32080;&#26524;&#12434;&#12501;&#12449;&#12452;&#12523;&#12392;&#12375;&#12390;&#12461;&#12515;&#12483;&#12471;&#12517;&#12377;&#12427;&#22580;&#21512;&#12289;&#12501;&#12449;&#12452;&#12523;&#12471;&#12473;&#12486;&#12512;&#12395;&#12424;&#12427;&#23383;&#25968;&#21046;&#38480;&#12434;&#21463;&#12369;&#12414;&#12377;&#12290;&lt;/p&gt;

&lt;h2&gt;&#25313;&#24373;&lt;/h2&gt;

&lt;p&gt;&#25313;&#24373;&#12399;&#21629;&#20196;&#12514;&#12472;&#12517;&#12540;&#12523;&#12398;&#36861;&#21152;&#12392;&#12356;&#12358;&#24418;&#12391;&#34892;&#12356;&#12414;&#12377;&#12290;
&#35443;&#12375;&#12367;&#12399;&#12477;&#12540;&#12473;&#12467;&#12540;&#12489;&#35211;&#12390;&#12367;&#12384;&#12373;&#12356;&#12290;&lt;/p&gt;

&lt;h2&gt;&#20170;&#24460;&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&#28961;&#21517;&#38306;&#25968;&#30340;&#12394;&#12418;&#12398;&#12290;&lt;/li&gt;
&lt;li&gt;&#22806;&#37096;&#12363;&#12425;&#30452;&#25509;&#21628;&#12403;&#20986;&#12379;&#12394;&#12356;&#21629;&#20196;&#12392;&#12363;&#65311;&lt;/li&gt;
&lt;li&gt;&#12456;&#12521;&#12540;&#12513;&#12483;&#12475;&#12540;&#12472;&#12392;&#12363;&#65311;&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;&#21442;&#32771;:&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://blog.netswitch.jp/articles/2008/02/23/purl-runtime"&gt;Purl&#23455;&#34892;&#29872;&#22659;!&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://github.com/nanki/purl/tree/master"&gt;purl - github&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://github.com/nanki/purl/wikis"&gt;purl wiki - github&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <pubDate>Thu, 23 Oct 2008 10:15:00 +0900</pubDate>
      <guid isPermaLink="false">urn:uuid:1ac0576b-19f3-4cf1-b766-b63b893596c6</guid>
      <author>nanki</author>
      <link>http://blog.netswitch.jp/articles/2008/10/23/purl-image-processing-language-with-rails</link>
      <category>web</category>
      <category>tech</category>
      <category>image processing</category>
      <category>ruby</category>
      <category>javascript</category>
      <category>rails</category>
      <category>rails_plugin</category>
      <category>ruby</category>
      <category>purl</category>
      <trackback:ping>http://blog.netswitch.jp/articles/trackback/8636</trackback:ping>
    </item>
    <item>
      <title>named routes&#12391;transit_sid&#12364;&#21205;&#12363;&#12394;&#12356;</title>
      <description>&lt;p&gt;person_url&#12392;&#12363;&#12395;session_id&#12364;&#12388;&#12363;&#12394;&#12356;&#12392;&#24605;&#12387;&#12383;&#12425;&#12289;&#26368;&#36969;&#21270;&#12398;&#12383;&#12417;&#12398;&#12467;&#12540;&#12489;&#12364;&#12289;default&lt;em&gt;url&lt;/em&gt;options&#12434;&#28961;&#35222;&#12377;&#12427;&#12425;&#12375;&#12356;&#12290;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://dev.rubyonrails.org/ticket/10925"&gt;#10925 (Routing optimization, named routes missing default url options) - Rails Trac - Trac&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Fri, 01 Feb 2008 11:50:00 +0900</pubDate>
      <guid isPermaLink="false">urn:uuid:8f95d81e-5b09-47b2-9e65-63aa2955a523</guid>
      <author>nanki</author>
      <link>http://blog.netswitch.jp/articles/2008/02/01/default-url-options-are-ignored-in-named-routes</link>
      <category>tech</category>
      <category>ruby</category>
      <category>rails</category>
      <category>ruby</category>
      <trackback:ping>http://blog.netswitch.jp/articles/trackback/8605</trackback:ping>
    </item>
    <item>
      <title>BenchmarkForRails&#23566;&#20837;&#12391;rake&#12364;&#21205;&#12363;&#12394;&#12356;</title>
      <description>&lt;div class="typocode"&gt;&lt;pre class='prettyprint'&gt;&lt;code class="typocode_default "&gt; &#9822; rake test:units
(in /Users/nanki/work/...../trunk)
rake aborted!
undefined method `watch' for BenchmarkForRails:Module&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&#12371;&#12428;&#12399;&#22256;&#12387;&#12383;&#12290;&lt;/p&gt;

&lt;p&gt;AutoLoading&#12364;&#12358;&#12414;&#12367;&#12356;&#12387;&#12390;&#12356;&#12394;&#12356;&#12424;&#12358;&#12384;&#12364;&#12289;&#12371;&#12398;&#25163;&#12398;&#21839;&#38988;&#12399;&#36861;&#36321;&#12364;&#38627;&#12375;&#12356;&#12290;
&#12392;&#12426;&#12354;&#12360;&#12378;&#36969;&#24403;&#12394;&#31623;&#25152;&#12391;&#12289;&lt;code&gt;require 'benchmark_for_rails'&lt;/code&gt;&#12375;&#12390;&#12362;&#12369;&#12400;&#22823;&#19976;&#22827;&#12384;&#12364;&#12289;&#27671;&#25345;&#12385;&#24746;&#12356;&#12398;&#12391;&#27425;&#12398;&#26085;&#21407;&#22240;&#12434;&#36861;&#12387;&#12390;&#12415;&#12383;&#12290;&lt;/p&gt;

&lt;p&gt;p&#36861;&#36321;&#12398;&#32080;&#26524;&#12384;&#12369;&#26360;&#12367;&#12392;&#12289;rake &#23455;&#34892;&#26178;&#12395;&#35501;&#12415;&#36796;&#12414;&#12428;&#12427;&lt;code&gt;logs.rake&lt;/code&gt;&#20882;&#38957;&#12391;&#12398;&lt;code&gt;require&lt;/code&gt;&#12391;&#12289;&lt;code&gt;BenchmarkForRails&lt;/code&gt;&#12514;&#12472;&#12517;&#12540;&#12523;&#12364;&#21021;&#26399;&#21270;&#12373;&#12428;&#12390;&#12289;&#26412;&#26469;&#35501;&#12414;&#12428;&#12390;&#27442;&#12375;&#12356;&#12399;&#12378;&#12398;&#12289;&lt;code&gt;benchmark_for_rails.rb&lt;/code&gt;&#12364;&#12525;&#12540;&#12489;&#12373;&#12428;&#12394;&#12356;&#12398;&#12364;&#21839;&#38988;&#12290;&lt;/p&gt;

&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="comment"&gt;# in vendor/plugins/benchmark_for_rails/tasks/logs.rake&lt;/span&gt;
&lt;span class="ident"&gt;require&lt;/span&gt; &lt;span class="constant"&gt;File&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;dirname&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="constant"&gt;__FILE__&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt; &lt;span class="punct"&gt;+&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;/../lib/parsing.rb&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt;
&lt;span class="ident"&gt;require&lt;/span&gt; &lt;span class="constant"&gt;File&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;dirname&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="constant"&gt;__FILE__&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt; &lt;span class="punct"&gt;+&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;/../lib/report.rb&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&#23550;&#20966;&#27861;&#12399;&lt;a href="http://blog.s21g.com/articles/283"&gt;&#12371;&#12385;&#12425;&lt;/a&gt;&#12398;&#36890;&#12426;&#12290;&lt;/p&gt;

&lt;p&gt;&#12392;&#24605;&#12387;&#12383;&#12425;&#12289;&#20170;&#26397;&#20116;&#26178;&#12395;&#30452;&#12387;&#12390;&#12427;&#12376;&#12419;&#12394;&#12356;&#12398;&#12290;&lt;/p&gt;

&lt;h4&gt;&#21442;&#32771;:&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://blog.s21g.com/articles/283"&gt;BenchmarkForRails&#12391;test:units&#12364;&#12456;&#12521;&#12540;&#12395;&#12394;&#12427;&#21839;&#38988; - Hello, world! - s21g&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <pubDate>Fri, 28 Dec 2007 11:10:00 +0900</pubDate>
      <guid isPermaLink="false">urn:uuid:4247b188-cf31-4848-a7f1-b7d6d12cf3a9</guid>
      <author>nanki</author>
      <link>http://blog.netswitch.jp/articles/2007/12/28/rake-does-not-work-with-b4r</link>
      <category>tech</category>
      <category>ruby</category>
      <category>rails</category>
      <category>rails_plugin</category>
      <trackback:ping>http://blog.netswitch.jp/articles/trackback/8600</trackback:ping>
    </item>
    <item>
      <title>Rails&#12450;&#12503;&#12522;&#12465;&#12540;&#12471;&#12519;&#12531;&#12398;&#22269;&#38555;&#21270; - Globalize</title>
      <description>&lt;p&gt;Globalize&#12434;&#20351;&#12387;&#12390;&#12415;&#12427;&#12290;&lt;/p&gt;

&lt;h3&gt;&#12475;&#12483;&#12488;&#12450;&#12483;&#12503;&lt;/h3&gt;

&lt;p&gt;&#36969;&#24403;&#12394;Rails&#12450;&#12503;&#12522;&#12434;&#20316;&#12387;&#12390;&#12289;Globalize&#12434;&#12452;&#12531;&#12473;&#12488;&#12540;&#12523;&#12290;&lt;/p&gt;

&lt;div class="typocode"&gt;&lt;pre class='prettyprint'&gt;&lt;code class="typocode_default "&gt;$ script/plugin install http://svn.globalize-rails.org/svn/globalize/trunk
....
$ mv vendor/plugins/trunk vendor/plugins/globalize
$ rake globalize:setup&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;CSV::Cell&#12364;inspect&#12373;&#12428;&#12383;&#12424;&#12358;&#12394;&#12456;&#12521;&#12540;&#12364;&#20986;&#12427;&#12398;&#12391;&#12289;&lt;code&gt;vendor/plugins/globalize/tasks/data.rake&lt;/code&gt; &#12434;&#20462;&#27491;&#12377;&#12427;&#12290;&lt;/p&gt;

&lt;div class="typocode"&gt;&lt;pre class='prettyprint'&gt;&lt;code class="typocode_default "&gt;--- ./vendor/plugins/globalize/tasks/data.rake.orig     0000-00-00 00:00:00.000000000 +0000
+++ ./vendor/plugins/globalize/tasks/data.rake  0000-00-00 00:00:00.000000000 +0000
@@ -17,3 +17,3 @@

-    columns = reader.shift.map { |column_name| cnx.quote_column_name(column_name) }
+    columns = reader.shift.map { |column_name| cnx.quote_column_name(column_name.data) }
     column_clause = columns.join(', ')
@@ -24,3 +24,3 @@
       raise &amp;quot;No header defined&amp;quot;     unless column_clause
-      values_clause = row.map { |v| cnx.quote(v).gsub('\\n', &amp;quot;\n&amp;quot;).gsub('\\r', &amp;quot;\r&amp;quot;) }.join(', ')
+      values_clause = row.map { |v| cnx.quote(v.data).gsub('\\n', &amp;quot;\n&amp;quot;).gsub('\\r', &amp;quot;\r&amp;quot;) }.join(', ')
       sql = &amp;quot;INSERT INTO #{table_name} (#{column_clause}) VALUES (#{values_clause})&amp;quot;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&#12373;&#12425;&#12395;&#12289;&lt;code&gt;vendor/plugins/globalize/data/language_data.csv&lt;/code&gt; &#12398;&#31354;&#34892;&#12364;&#12456;&#12521;&#12540;&#12434;&#36215;&#12371;&#12375;&#12390;&#12356;&#12427;&#12398;&#12391;&#20462;&#27491;&#12290;&lt;/p&gt;

&lt;div class="typocode"&gt;&lt;pre class='prettyprint'&gt;&lt;code class="typocode_default "&gt;$ rake globalize:setup
...&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&#25104;&#21151;&#12290;&lt;/p&gt;

&lt;h3&gt;View&#32763;&#35379;&lt;/h3&gt;

&lt;p&gt;base_language&#12434;&#33521;&#35486;&#12395;&#12290;&lt;/p&gt;

&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="comment"&gt;# config/environment.rb&lt;/span&gt;
&lt;span class="constant"&gt;Globalize&lt;/span&gt;&lt;span class="punct"&gt;::&lt;/span&gt;&lt;span class="constant"&gt;Locale&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;set_base_language&lt;/span&gt;&lt;span class="punct"&gt;(&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;en-US&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;div class="typocode"&gt;&lt;pre class='prettyprint'&gt;&lt;code class="typocode_default "&gt;$ script/console
&amp;gt;&amp;gt; &amp;quot;March [month]&amp;quot;.t
=&amp;gt; &amp;quot;March&amp;quot;
&amp;gt;&amp;gt; Globalize::Locale.set(&amp;quot;ja-JP&amp;quot;)
=&amp;gt; #&amp;lt;Globalize::Locale...
&amp;gt;&amp;gt; &amp;quot;March [month]&amp;quot;.t
=&amp;gt; &amp;quot;3&#26376;&amp;quot;
&amp;gt;&amp;gt; Time.now.loc &amp;quot;%A&amp;quot;
=&amp;gt; &amp;quot;&#26085;&#26332;&#26085;&amp;quot;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&#12405;&#12416;&#12405;&#12416;&#12290;&#12371;&#12398;&#36794;&#12399;&#12289;gettext&#12398;&#26041;&#12364;&#20351;&#12356;&#12420;&#12377;&#12381;&#12358;&#12363;&#12394;&#12353;&#12290;&lt;/p&gt;

&lt;h3&gt;Model&#32763;&#35379;&lt;/h3&gt;

&lt;p&gt;&#36969;&#24403;&#12394;&#12514;&#12487;&#12523;&#12434;&#20316;&#25104;&lt;/p&gt;

&lt;div class="typocode"&gt;&lt;pre class='prettyprint'&gt;&lt;code class="typocode_default "&gt;$ script/generate model Product
...&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="comment"&gt;# db/migrate/001_create_products.rb&lt;/span&gt;
  &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;self.up&lt;/span&gt;
    &lt;span class="ident"&gt;create_table&lt;/span&gt; &lt;span class="symbol"&gt;:products&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt; &lt;span class="punct"&gt;|&lt;/span&gt;&lt;span class="ident"&gt;t&lt;/span&gt;&lt;span class="punct"&gt;|&lt;/span&gt;
      &lt;span class="ident"&gt;t&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;column&lt;/span&gt; &lt;span class="symbol"&gt;:name&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="symbol"&gt;:string&lt;/span&gt;
      &lt;span class="ident"&gt;t&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;column&lt;/span&gt; &lt;span class="symbol"&gt;:manufacturer&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="symbol"&gt;:string&lt;/span&gt;
    &lt;span class="keyword"&gt;end&lt;/span&gt;
  &lt;span class="keyword"&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;div class="typocode"&gt;&lt;pre class='prettyprint'&gt;&lt;code class="typocode_default "&gt;$ rake db:migrate&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="global"&gt;$ &lt;/span&gt;&lt;span class="ident"&gt;script&lt;/span&gt;&lt;span class="punct"&gt;/&lt;/span&gt;&lt;span class="ident"&gt;console&lt;/span&gt;
&lt;span class="punct"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="ident"&gt;p&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="constant"&gt;Product&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;create&lt;/span&gt; &lt;span class="symbol"&gt;:name&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Pucchin Pudding&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;,&lt;/span&gt; &lt;span class="symbol"&gt;:manufacturer&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Glico&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
&lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="comment"&gt;#&amp;lt;Product:...&lt;/span&gt;
&lt;span class="punct"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="ident"&gt;p&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;name&lt;/span&gt;
&lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Pucchin Pudding&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
&lt;span class="punct"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="ident"&gt;p&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;manufacturer&lt;/span&gt;
&lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Glico&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;

&lt;span class="comment"&gt;# ja&#12391;&#20445;&#23384;&#12290;&lt;/span&gt;
&lt;span class="punct"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="constant"&gt;Globalize&lt;/span&gt;&lt;span class="punct"&gt;::&lt;/span&gt;&lt;span class="constant"&gt;Locale&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;set&lt;/span&gt;&lt;span class="punct"&gt;(&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;ja-JP&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;)&lt;/span&gt;
&lt;span class="punct"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="ident"&gt;p&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;name&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;&#12503;&#12483;&#12481;&#12531;&#12503;&#12522;&#12531;&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
&lt;span class="punct"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="ident"&gt;p&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;manufacturer&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;&#12464;&#12522;&#12467;&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
&lt;span class="punct"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="ident"&gt;p&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;save&lt;/span&gt;
&lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="constant"&gt;true&lt;/span&gt;

&lt;span class="comment"&gt;# ja&#12391;&#35501;&#12416;&#12290;&lt;/span&gt;
&lt;span class="punct"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="ident"&gt;p&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;reload&lt;/span&gt;
&lt;span class="punct"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="ident"&gt;p&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;name&lt;/span&gt;
&lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;&#12503;&#12483;&#12481;&#12531;&#12503;&#12522;&#12531;&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
&lt;span class="punct"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="ident"&gt;p&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;manufacturer&lt;/span&gt;
&lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;&#12464;&#12522;&#12467;&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;

&lt;span class="comment"&gt;# en&#12391;&#35501;&#12416;&#12290;&lt;/span&gt;
&lt;span class="punct"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="constant"&gt;Globalize&lt;/span&gt;&lt;span class="punct"&gt;::&lt;/span&gt;&lt;span class="constant"&gt;Locale&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;set&lt;/span&gt;&lt;span class="punct"&gt;(&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;en-US&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;)&lt;/span&gt;
&lt;span class="punct"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="ident"&gt;p&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;reload&lt;/span&gt;
&lt;span class="punct"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="ident"&gt;p&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;name&lt;/span&gt;
&lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Pucchin Pudding&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
&lt;span class="punct"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="ident"&gt;p&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;manufacturer&lt;/span&gt;
&lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Glico&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&#12385;&#12419;&#12435;&#12392;&#21205;&#12356;&#12390;&#12427;&#12290;&lt;/p&gt;

&lt;p&gt;&#12371;&#12398;&#26178;&#12289;&lt;code&gt;products&lt;/code&gt;&#12486;&#12540;&#12502;&#12523;&#12395;&#12399;base_language&#12391;&#26684;&#32013;&#12373;&#12428;&#12289;&#12381;&#12428;&#12392;&#12399;&#21029;&#12395;&lt;code&gt;globalize_translations&lt;/code&gt;&#12486;&#12540;&#12502;&#12523;&#12395;&#12289;&#32763;&#35379;&#24773;&#22577;&#12434;&#20445;&#25345;&#12375;&#12390;&#12356;&#12427;&#12290;&lt;/p&gt;

&lt;div class="typocode"&gt;&lt;pre class='prettyprint'&gt;&lt;code class="typocode_default "&gt;sqlite&amp;gt; SELECT * FROM globalize_translations WHERE id &amp;gt; 7088;
id          type              tr_key      table_name  item_id     facet       built_in    language_id  pluralization_index  text                   namespace
----------  ----------------  ----------  ----------  ----------  ----------  ----------  -----------  -------------------  ---------------------  ----------
7089        ModelTranslation              products    18          name        t           2723                              &#12503;&#12483;&#12481;&#12531;&#12503;&#12522;&#12531;
7090        ModelTranslation              products    18          manufactur  t           2723                              &#12464;&#12522;&#12467;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Object#_&#12364;&#23450;&#32681;&#12373;&#12428;&#12390;&#12356;&#12383;&#12398;&#12391;&#12289;gettext&#12392;&#12465;&#12531;&#12459;&#12377;&#12427;&#12363;&#12392;&#24605;&#12387;&#12383;&#12369;&#12393;&#12289;&#19968;&#32210;&#12395;&#21205;&#12356;&#12383;&#12290;
&#20598;&#28982;&#12363;&#12418;&#12375;&#12428;&#12394;&#12356;&#12369;&#12393;&#12290;&lt;/p&gt;

&lt;p&gt;&lt;img src="/files/globalize.png" alt="screenshot"/&gt;&lt;/p&gt;

&lt;p&gt;&#12381;&#12435;&#12394;&#12371;&#12435;&#12394;&#12391;&#12289;&#8593;&#12371;&#12435;&#12394;&#12450;&#12503;&#12522;&#12465;&#12540;&#12471;&#12519;&#12531;&#12364;&#12391;&#12365;&#12390;&#12375;&#12414;&#12358;&#12290;&lt;br/&gt;
&#12399;&#12383;&#12375;&#12390;&#12289;&#20351;&#12358;&#27231;&#20250;&#12399;&#35370;&#12428;&#12427;&#12398;&#12363;&#65311;&lt;/p&gt;

&lt;h4&gt;&#36861;&#35352;:&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;eager loading&#12434;&#34892;&#12358;&#26178;&#12399;&#12289;:include_translated&#12434;&#20351;&#12358;&#12290;&lt;/li&gt;
&lt;li&gt;&#12364;&#12289;&#23550;&#24540;&#12364;&#20013;&#36884;&#21322;&#31471;&#12391;&#12289;user.product_name&#12392;&#12450;&#12463;&#12475;&#12473;&#12375;&#12394;&#12356;&#12392;&#12384;&#12417;&#12387;&#12413;&#12356;&#12290;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="keyword"&gt;class &lt;/span&gt;&lt;span class="class"&gt;User&lt;/span&gt;
  &lt;span class="ident"&gt;belongs_to&lt;/span&gt; &lt;span class="symbol"&gt;:product&lt;/span&gt;
&lt;span class="keyword"&gt;end&lt;/span&gt;

&lt;span class="ident"&gt;user&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="constant"&gt;User&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;find&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="symbol"&gt;:first&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="symbol"&gt;:include_translated&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="symbol"&gt;:product&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;

&lt;span class="ident"&gt;user&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;product&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;name&lt;/span&gt; &lt;span class="comment"&gt;#=&amp;gt; NG&lt;/span&gt;
&lt;span class="ident"&gt;user&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;product_name&lt;/span&gt; &lt;span class="comment"&gt;#=&amp;gt; OK&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h5&gt;&#21442;&#32771;:&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.globalize-rails.org/globalize/"&gt;Globalize&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <pubDate>Sun, 26 Aug 2007 10:15:00 +0900</pubDate>
      <guid isPermaLink="false">urn:uuid:9b0d74d4-d11a-4264-b671-90cd19e08926</guid>
      <author>nanki</author>
      <link>http://blog.netswitch.jp/articles/2007/08/26/rails-plugin-globalize</link>
      <category>web</category>
      <category>tech</category>
      <category>ruby</category>
      <category>rails</category>
      <category>plugin</category>
      <category>rails_plugin</category>
      <trackback:ping>http://blog.netswitch.jp/articles/trackback/8595</trackback:ping>
    </item>
    <item>
      <title>OSC2007Kansai</title>
      <description>&lt;p&gt;&#12395;&#34892;&#12387;&#12390;&#12365;&#12414;&#12375;&#12383;&#12290;&lt;/p&gt;

&lt;p&gt;&#20170;&#22238;&#12399;&#12289;Rails&#12495;&#12531;&#12474;&#12458;&#12531;&#12475;&#12511;&#12490;&#12540;&#12398;&#35611;&#24107;&#12434;&#12420;&#12387;&#12383;&#12369;&#12393;&#12289;&#19968;&#26085;&#30446;&#12399;&#12289;&#12503;&#12525;&#12472;&#12455;&#12463;&#12479;&#12408;&#12398;&#25509;&#32154;&#12434;&#30906;&#35469;&#12375;&#12390;&#12394;&#12367;&#12390;&#12289;&#12415;&#12394;&#12373;&#12414;&#12395;&#12372;&#36855;&#24785;&#12434;&#12362;&#12363;&#12369;&#12375;&#12414;&#12375;&#12383;&#12290;&#12372;&#12417;&#12435;&#12394;&#12373;&#12356;&#12290;&lt;/p&gt;

&lt;p&gt;&#12385;&#12419;&#12435;&#12392;&#35373;&#23450;&#12375;&#12383;&#12398;&#12395;&#12289;&#20108;&#26085;&#30446;&#12418;&#12420;&#12387;&#12401;&#12426;&#12388;&#12394;&#12364;&#12425;&#12394;&#12367;&#12390;&#12289;okkez&#12373;&#12435;&#12395;&#36855;&#24785;&#12363;&#12369;&#12414;&#12375;&#12383;&#12290;&#12372;&#12417;&#12435;&#12394;&#12373;&#12356;&#12290;&lt;/p&gt;

&lt;p&gt;&#20108;&#26085;&#30446;&#12398;&#25031;&#35242;&#20250;&#12391;&#35211;&#12383;&#27005;&#22120;&#12289;&#12454;&#12480;&#12540;&#12364;&#12473;&#12468;&#12363;&#12387;&#12383;&#12290;&lt;br/&gt;
&#36009;&#22770;&#12375;&#12390;&#12383;&#12425;&#21361;&#12358;&#12367;&#36092;&#20837;&#12377;&#12427;&#12392;&#12371;&#12429;&#12384;&#12387;&#12383;&#12398;&#12395;&#12290;&#27531;&#24565;&#12290;&lt;br/&gt;
&#20170;&#24460;&#12395;&#26399;&#24453;&#12375;&#12390;&#12356;&#12414;&#12377;&#12290;&lt;/p&gt;

&lt;p&gt;&#12354;&#12392;&#12289;&#12362;&#23376;&#27096;&#36899;&#12428;&#12398;&#12362;&#23376;&#27096;&#12383;&#12385;&#12364;&#12392;&#12387;&#12390;&#12418;&#12363;&#12431;&#12356;&#12363;&#12387;&#12383;&#12424;&#12357;&#12290;&#23376;&#20379;&#12411;&#12375;&#12540;&#12290;&lt;/p&gt;

&lt;p&gt;&#24112;&#12426;&#12399;&#12289;&#20140;&#37117;&#39365;&#12363;&#12425;&#22235;&#26465;&#12414;&#12391;&#12289;&#25968;&#20154;&#12391;&#25955;&#27497;&#12290;&lt;br/&gt;
&#32763;&#35379;&#12398;&#20181;&#20107;&#12434;&#12375;&#12390;&#12356;&#12427;&#22806;&#22269;&#12398;&#26041;(&#12392;&#12356;&#12387;&#12390;&#12418;&#12418;&#12358;&#12411;&#12392;&#12435;&#12393;&#26085;&#26412;&#12398;&#26041;)&#12418;&#19968;&#32210;&#12391;&#12289;&#26481;&#26412;&#39000;&#23546;&#12395;&#25522;&#12370;&#12390;&#12354;&#12387;&#12383;&#30475;&#26495;&#12398;&#12467;&#12500;&#12540;&#12434;&#12384;&#12375;&#12395;&#12289;&#38754;&#30333;&#12356;&#35441;&#12364;&#33394;&#12293;&#32862;&#12369;&#12383;&#12290;&lt;/p&gt;

&lt;p&gt;OSC&#12398;&#20869;&#23481;&#12398;&#35441;&#12364;&#28961;&#12356;&#65281;&lt;/p&gt;

&lt;h4&gt;&#21442;&#32771;:&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.flickr.com/photos/31561567@N00/864233566/"&gt;&#20889;&#30495;(masuidrive&#12373;&#12435;)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://uda.la"&gt;&#12454;&#12480;&#12540;&#20844;&#24335;&#12469;&#12452;&#12488;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <pubDate>Sun, 22 Jul 2007 07:30:00 +0900</pubDate>
      <guid isPermaLink="false">urn:uuid:6b2fd379-b4d3-4770-b0e0-4a4309aea56a</guid>
      <author>nanki</author>
      <link>http://blog.netswitch.jp/articles/2007/07/22/osc2007kansai</link>
      <category>noise</category>
      <category>life</category>
      <category>ruby</category>
      <category>osc</category>
      <category>kansai</category>
      <category>ruby</category>
      <category>rails</category>
      <trackback:ping>http://blog.netswitch.jp/articles/trackback/8590</trackback:ping>
    </item>
    <item>
      <title>:conditions &#12398;&#36933;&#24310;&#35413;&#20385;</title>
      <description>&lt;p&gt;&#27877;&#33261;&#12356;&amp;amp;&#12354;&#12435;&#12414;&#12426;&#20351;&#12431;&#12394;&#12356;&#12398;&#12391;&#24536;&#12428;&#12364;&#12385;&#12384;&#12364;&#12289;Association&#12434;&#23450;&#32681;&#12377;&#12427;&#26178;&#12395;&#12289;&#12471;&#12531;&#12464;&#12523;&#12463;&#12457;&#12540;&#12488;&#12434;&#20351;&#12358;&#12392;&#12289;&#21442;&#29031;&#26178;&#12398;&#12452;&#12531;&#12473;&#12479;&#12531;&#12473;&#12391;&#35413;&#20385;&#12375;&#30452;&#12375;&#12390;&#12367;&#12428;&#12427;&#12290;&lt;/p&gt;

&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;  &lt;span class="keyword"&gt;class &lt;/span&gt;&lt;span class="class"&gt;Road&lt;/span&gt;
    &lt;span class="ident"&gt;belongs_to&lt;/span&gt; &lt;span class="symbol"&gt;:node&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="symbol"&gt;:foreign_key&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;[&lt;/span&gt;&lt;span class="symbol"&gt;:meshcode&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="symbol"&gt;:nodeno&lt;/span&gt;&lt;span class="punct"&gt;],&lt;/span&gt; &lt;span class="symbol"&gt;:conditions&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;nodes.linkno = #{linkno}&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt;
  &lt;span class="keyword"&gt;end&lt;/span&gt;

  &lt;span class="constant"&gt;Road&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;find&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="symbol"&gt;:first&lt;/span&gt;&lt;span class="punct"&gt;).&lt;/span&gt;&lt;span class="ident"&gt;node&lt;/span&gt; &lt;span class="comment"&gt;# =&amp;gt; &amp;quot;SELECT * FROM nodes WHERE nodes.linkno = 1&amp;quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;  &lt;span class="keyword"&gt;class &lt;/span&gt;&lt;span class="class"&gt;Road&lt;/span&gt;
    &lt;span class="ident"&gt;belongs_to&lt;/span&gt; &lt;span class="symbol"&gt;:node&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="symbol"&gt;:foreign_key&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;[&lt;/span&gt;&lt;span class="symbol"&gt;:meshcode&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="symbol"&gt;:nodeno&lt;/span&gt;&lt;span class="punct"&gt;],&lt;/span&gt; &lt;span class="symbol"&gt;:conditions&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;nodes.linkno = #{table_name}.linkno&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt;
  &lt;span class="keyword"&gt;end&lt;/span&gt;

  &lt;span class="constant"&gt;Road&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;find&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="symbol"&gt;:first&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="symbol"&gt;:include&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="symbol"&gt;:node&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt; &lt;span class="comment"&gt;# =&amp;gt; &amp;quot;SELECT * FROM roads LEFT OUTER JOIN nodes ON ... WHERE nodes.linkno = roads.linkno&amp;quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&#12371;&#12371;&#12391;&lt;code&gt;table_name&lt;/code&gt;&#12364;(&#12420;&#12387;&#12390;&#12415;&#12383;&#12425;)&#20351;&#12360;&#12427;&#12398;&#12399;&#12289;&lt;/p&gt;

&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="comment"&gt;# lib/active_record/associations.rb&lt;/span&gt;
  &lt;span class="keyword"&gt;class &lt;/span&gt;&lt;span class="class"&gt;JoinBase&lt;/span&gt;
    &lt;span class="ident"&gt;attr_reader&lt;/span&gt; &lt;span class="symbol"&gt;:active_record&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="symbol"&gt;:table_joins&lt;/span&gt;
    &lt;span class="ident"&gt;delegate&lt;/span&gt;    &lt;span class="symbol"&gt;:table_name&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="symbol"&gt;:column_names&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="symbol"&gt;:primary_key&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="symbol"&gt;:reflections&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="symbol"&gt;:sanitize_sql&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="symbol"&gt;:to&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="symbol"&gt;:active_record&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&#12371;&#12398;delegate&#12398;&#12362;&#12363;&#12370;&#12363;&#65311;&lt;/p&gt;

&lt;p&gt;&#27425;&#12398;&#12424;&#12358;&#12395;&#26360;&#12369;&#12400;&#12289;&#12393;&#12385;&#12425;&#12391;&#12418;&#12356;&#12369;&#12427;&#12290;&lt;/p&gt;

&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;  &lt;span class="ident"&gt;belongs_to&lt;/span&gt; &lt;span class="symbol"&gt;:node&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="symbol"&gt;:foreign_key&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;[&lt;/span&gt;&lt;span class="symbol"&gt;:meshcode&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="symbol"&gt;:nodeno&lt;/span&gt;&lt;span class="punct"&gt;],&lt;/span&gt; &lt;span class="symbol"&gt;:conditions&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;nodes.linkno = #{linkno rescue &amp;quot;#{table_name}.linkno&amp;quot;}&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&#12356;&#12356;&#12398;&#12363;&#12289;&#12371;&#12435;&#12394;&#12435;&#12391;&#12290;&lt;/p&gt;</description>
      <pubDate>Thu, 05 Jul 2007 15:38:00 +0900</pubDate>
      <guid isPermaLink="false">urn:uuid:0ef253f2-d197-4d6a-baf5-82cbea94c574</guid>
      <author>nanki</author>
      <link>http://blog.netswitch.jp/articles/2007/07/05/lazy-evaluation-in-associations</link>
      <category>web</category>
      <category>ruby</category>
      <category>rails</category>
      <category>associations</category>
      <trackback:ping>http://blog.netswitch.jp/articles/trackback/8587</trackback:ping>
    </item>
    <item>
      <title>Rails&#38283;&#30330;&#29992;&#20415;&#21033;&#12473;&#12463;&#12522;&#12503;&#12488;</title>
      <description>&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="comment"&gt;#!/usr/bin/env ruby&lt;/span&gt;

&lt;span class="constant"&gt;EDITOR&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="constant"&gt;ENV&lt;/span&gt;&lt;span class="punct"&gt;['&lt;/span&gt;&lt;span class="string"&gt;EDITOR&lt;/span&gt;&lt;span class="punct"&gt;']&lt;/span&gt; &lt;span class="punct"&gt;||&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;vim&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt;

&lt;span class="ident"&gt;files&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; `&lt;span class="ident"&gt;find&lt;/span&gt; &lt;span class="punct"&gt;.&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;type&lt;/span&gt; &lt;span class="ident"&gt;f&lt;/span&gt; &lt;span class="punct"&gt;!&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;path&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;./tmp/*&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="punct"&gt;!&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;path&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;./log/*&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="punct"&gt;!&lt;/span&gt; &lt;span class="punct"&gt;-&lt;/span&gt;&lt;span class="ident"&gt;path&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;*/.svn/*&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="comment"&gt;#{ARGV.map{|v| &amp;quot;#{/^-/ === v ? '!' : ''} -path '*#{v.gsub(/^-/, '')}*' &amp;quot;}.join}`&lt;/span&gt;
&lt;span class="ident"&gt;system&lt;/span&gt;&lt;span class="punct"&gt;(&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;&lt;span class="expr"&gt;#{EDITOR}&lt;/span&gt; &lt;span class="expr"&gt;#{files.split.join(' ')}&lt;/span&gt;&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;)&lt;/span&gt;
&lt;span class="ident"&gt;puts&lt;/span&gt; &lt;span class="ident"&gt;files&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&#12392;&#12356;&#12358;&#12473;&#12463;&#12522;&#12503;&#12488;&#12434;&lt;code&gt;vif&lt;/code&gt;&#12392;&#12356;&#12358;&#21517;&#21069;&#12391;&#12467;&#12510;&#12531;&#12489;&#12395;&#12375;&#12390;&#12362;&#12356;&#12390;&#12289;&lt;code&gt;$ vif .js&lt;/code&gt;&#12391;JavaScript&#12501;&#12449;&#12452;&#12523;&#12434;&#20840;&#12390;&#38283;&#12356;&#12383;&#12426;&#12289;&lt;code&gt;$ vif controller -test&lt;/code&gt;&#12392;&#12363;&#12391;&#12289;&#12486;&#12473;&#12488;&#12434;&#38500;&#12367;&#12467;&#12531;&#12488;&#12525;&#12540;&#12521;&#38306;&#20418;&#12398;&#12501;&#12449;&#12452;&#12523;&#12434;&#12377;&#12409;&#12390;&#38283;&#12356;&#12383;&#12426;&#12290;&lt;/p&gt;

&lt;p&gt;Eclipse&#12398;GoToFile&#12415;&#12383;&#12356;&#12290;&lt;/p&gt;</description>
      <pubDate>Mon, 18 Jun 2007 17:01:00 +0900</pubDate>
      <guid isPermaLink="false">urn:uuid:e35f6d59-0a3a-48b0-9ddb-a7c9992aaf0e</guid>
      <author>nanki</author>
      <link>http://blog.netswitch.jp/articles/2007/06/18/useful-script-for-rails-development</link>
      <category>tech</category>
      <category>ruby</category>
      <category>ruby</category>
      <category>rails</category>
      <trackback:ping>http://blog.netswitch.jp/articles/trackback/8584</trackback:ping>
    </item>
    <item>
      <title>JavaScript URLMapper</title>
      <description>&lt;p&gt;&#12385;&#12423;&#12387;&#12392;&#35079;&#38609;&#12394;&#12497;&#12473;&#20307;&#31995;&#12434;&#25345;&#12388;Rails&#12450;&#12503;&#12522;&#12391;JSON&#12391;AJAX&#12377;&#12427;&#20154;&#12395;&#12399;&#24441;&#12395;&#31435;&#12388;&#12363;&#12418;&#12375;&#12428;&#12394;&#12356;&#12290;
GoogleMaps&#12392;&#12363;&#12397;&#12290;&lt;/p&gt;

&lt;p&gt;&#35201; prototype.js&lt;/p&gt;

&lt;p&gt;&#20351;&#12356;&#26041;&#12399;&#12371;&#12435;&#12394;&#39080;&#12290;&lt;/p&gt;

&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="constant"&gt;URLMapper&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;connect&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;
  &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;/user/:user_id/category/:category_id/entry/:action/:entry_id&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;,&lt;/span&gt;
  &lt;span class="punct"&gt;{&lt;/span&gt;&lt;span class="ident"&gt;controller&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;entry&lt;/span&gt;&lt;span class="punct"&gt;',&lt;/span&gt; &lt;span class="ident"&gt;action&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;index&lt;/span&gt;&lt;span class="punct"&gt;',&lt;/span&gt; &lt;span class="ident"&gt;entry_id&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt; &lt;span class="ident"&gt;null&lt;/span&gt;&lt;span class="punct"&gt;});&lt;/span&gt;
&lt;span class="constant"&gt;URLMapper&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;connect&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;
  &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;/user/:user_id/category/:action/:category_id&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;,&lt;/span&gt;
  &lt;span class="punct"&gt;{&lt;/span&gt;&lt;span class="ident"&gt;controller&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;category&lt;/span&gt;&lt;span class="punct"&gt;',&lt;/span&gt; &lt;span class="ident"&gt;action&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;index&lt;/span&gt;&lt;span class="punct"&gt;',&lt;/span&gt; &lt;span class="ident"&gt;category_id&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt; &lt;span class="ident"&gt;null&lt;/span&gt;&lt;span class="punct"&gt;});&lt;/span&gt;
&lt;span class="constant"&gt;URLMapper&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;connect&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;
  &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;/user/:action/:user_id&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;,&lt;/span&gt;
  &lt;span class="punct"&gt;{&lt;/span&gt;&lt;span class="ident"&gt;controller&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;user&lt;/span&gt;&lt;span class="punct"&gt;',&lt;/span&gt; &lt;span class="ident"&gt;action&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;index&lt;/span&gt;&lt;span class="punct"&gt;',&lt;/span&gt; &lt;span class="ident"&gt;user_id&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt; &lt;span class="ident"&gt;null&lt;/span&gt;&lt;span class="punct"&gt;});&lt;/span&gt;
&lt;span class="constant"&gt;URLMapper&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;connect&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;
  &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;/:controller/:action/:id&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;,&lt;/span&gt;
  &lt;span class="punct"&gt;{&lt;/span&gt;&lt;span class="ident"&gt;action&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;index&lt;/span&gt;&lt;span class="punct"&gt;',&lt;/span&gt; &lt;span class="ident"&gt;id&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt; &lt;span class="ident"&gt;null&lt;/span&gt;&lt;span class="punct"&gt;});&lt;/span&gt;

&lt;span class="constant"&gt;URLMapper&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;url_for&lt;/span&gt;&lt;span class="punct"&gt;({&lt;/span&gt;&lt;span class="ident"&gt;controller&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;entry&lt;/span&gt;&lt;span class="punct"&gt;'});&lt;/span&gt;
&lt;span class="punct"&gt;/&lt;/span&gt;&lt;span class="regex"&gt;&lt;/span&gt;&lt;span class="punct"&gt;/&lt;/span&gt; &lt;span class="punct"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;/entry/index/&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
&lt;span class="constant"&gt;URLMapper&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;url_for&lt;/span&gt;&lt;span class="punct"&gt;({&lt;/span&gt;&lt;span class="ident"&gt;controller&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;entry&lt;/span&gt;&lt;span class="punct"&gt;',&lt;/span&gt; &lt;span class="ident"&gt;action&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;new&lt;/span&gt;&lt;span class="punct"&gt;'});&lt;/span&gt;
&lt;span class="punct"&gt;/&lt;/span&gt;&lt;span class="regex"&gt;&lt;/span&gt;&lt;span class="punct"&gt;/&lt;/span&gt; &lt;span class="punct"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;/entry/new/&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
&lt;span class="constant"&gt;URLMapper&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;url_for&lt;/span&gt;&lt;span class="punct"&gt;({&lt;/span&gt;&lt;span class="ident"&gt;controller&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;category&lt;/span&gt;&lt;span class="punct"&gt;',&lt;/span&gt; &lt;span class="ident"&gt;action&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;new&lt;/span&gt;&lt;span class="punct"&gt;'});&lt;/span&gt;
&lt;span class="punct"&gt;/&lt;/span&gt;&lt;span class="regex"&gt;&lt;/span&gt;&lt;span class="punct"&gt;/&lt;/span&gt; &lt;span class="punct"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;/category/new/&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
&lt;span class="constant"&gt;URLMapper&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;url_for&lt;/span&gt;&lt;span class="punct"&gt;({&lt;/span&gt;&lt;span class="ident"&gt;controller&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;category&lt;/span&gt;&lt;span class="punct"&gt;',&lt;/span&gt; &lt;span class="ident"&gt;action&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;new&lt;/span&gt;&lt;span class="punct"&gt;',&lt;/span&gt; &lt;span class="ident"&gt;user_id&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt; &lt;span class="number"&gt;3&lt;/span&gt;&lt;span class="punct"&gt;});&lt;/span&gt;
&lt;span class="punct"&gt;/&lt;/span&gt;&lt;span class="regex"&gt;&lt;/span&gt;&lt;span class="punct"&gt;/&lt;/span&gt; &lt;span class="punct"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;/user/3/category/new/&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
&lt;span class="constant"&gt;URLMapper&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;url_for&lt;/span&gt;&lt;span class="punct"&gt;({&lt;/span&gt;&lt;span class="ident"&gt;controller&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;category&lt;/span&gt;&lt;span class="punct"&gt;',&lt;/span&gt; &lt;span class="ident"&gt;action&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;update&lt;/span&gt;&lt;span class="punct"&gt;',&lt;/span&gt; &lt;span class="ident"&gt;user_id&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt; &lt;span class="number"&gt;3&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="ident"&gt;category_id&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt; &lt;span class="number"&gt;2&lt;/span&gt;&lt;span class="punct"&gt;});&lt;/span&gt;
&lt;span class="punct"&gt;/&lt;/span&gt;&lt;span class="regex"&gt;&lt;/span&gt;&lt;span class="punct"&gt;/&lt;/span&gt; &lt;span class="punct"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;/user/3/category/update/2&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
&lt;span class="constant"&gt;URLMapper&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;url_for&lt;/span&gt;&lt;span class="punct"&gt;({&lt;/span&gt;&lt;span class="ident"&gt;controller&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;entry&lt;/span&gt;&lt;span class="punct"&gt;',&lt;/span&gt; &lt;span class="ident"&gt;action&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;update&lt;/span&gt;&lt;span class="punct"&gt;',&lt;/span&gt; &lt;span class="ident"&gt;user_id&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt; &lt;span class="number"&gt;3&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="ident"&gt;category_id&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt; &lt;span class="number"&gt;2&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="ident"&gt;entry_id&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt; &lt;span class="number"&gt;1&lt;/span&gt;&lt;span class="punct"&gt;});&lt;/span&gt;
&lt;span class="punct"&gt;/&lt;/span&gt;&lt;span class="regex"&gt;&lt;/span&gt;&lt;span class="punct"&gt;/&lt;/span&gt; &lt;span class="punct"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;/user/3/category/2/entry/update/1&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;url_for &#12399;&#21487;&#22793;&#38263;&#24341;&#25968;&#12434;&#12392;&#12387;&#12390;&#12289;&#24341;&#25968;&#12434;Hash&#12392;&#12375;&#12390;&#12510;&#12540;&#12472;&#12377;&#12427;&#12398;&#12391;&#12289;&lt;/p&gt;

&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_javascript "&gt;//&#12469;&#12540;&#12496;&#12363;&#12425;JSON&#12434;&#21462;&#24471;&#12290;
//[{user_id: 3, category_id: 2, entry_id: 1}, ...]
var entries = getJSON();

URLMapper.url_for({controller: 'entry', action: 'update'}, entries[0]);
// -&amp;gt; &amp;quot;/user/3/category/2/entry/update/1&amp;quot;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&#12392;&#12363;&#12290;&lt;/p&gt;

&lt;p&gt;&#12477;&#12540;&#12473;&#12399;&#12371;&#12435;&#12394;&#12398;&#12290;&lt;/p&gt;

&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_javascript "&gt;Hash.prototype.subtract = function(op2) {
  var result = $H().merge(this);
  this.remove.apply(result, $H(op2).keys());
  return result;
};


var URLMapper = {
  url_options: $A(),

  UrlOption: function(url, required, defaults, match) {
    this.url      = url.gsub(/\/:([A-z_][A-z0-9_]*)/, function(match) {return '/#{' + match[1] + '}'});
    this.required = required;
    this.defaults = defaults;
    this.match    = match;
  },

  extractParameters: function(url) {
    var params = $H();
    url.scan(/\/:([A-z_][A-z0-9_]*)/, function(match) {params[match[1]] = true});
    return params;
  },

  connect: function(url, defaults) {
    url = url.gsub(/%3A/, ':');
    var params = this.extractParameters(url);
    var required = params.subtract(defaults);
    this.url_options.push(new this.UrlOption(url, required, $H(defaults), $H(defaults).subtract(params)));
  },

  url_for: function() {
    var options = $A(arguments).inject($H(), function(r, v){return r.merge(v)});
    var detected = this.url_options.select(
      function(url_option) {
        return url_option.required.subtract(options).size() == 0 &amp;amp;&amp;amp; url_option.match.all(function(pair){return options[pair.key] == pair.value});
      }
    ).sortBy(function(url_option) {
      return $H(options).subtract(url_option.required).subtract(url_option.defaults).size();
    }).first();


    if (!detected) {
      throw &amp;quot;no URL matches.&amp;quot;;
    }

    return (new Template(detected.url)).evaluate($H().merge(detected.defaults).merge(options));
  }
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
      <pubDate>Tue, 13 Feb 2007 15:03:00 +0900</pubDate>
      <guid isPermaLink="false">urn:uuid:b54a60b9-345a-43e3-83c9-9453f6824850</guid>
      <author>nanki</author>
      <link>http://blog.netswitch.jp/articles/2007/02/13/javascript-urlmapper</link>
      <category>web</category>
      <category>tech</category>
      <category>javascript</category>
      <category>rails</category>
      <category>json</category>
      <category>javascript</category>
      <trackback:ping>http://blog.netswitch.jp/articles/trackback/5557</trackback:ping>
    </item>
    <item>
      <title>Rails&#21193;&#24375;&#20250;@&#38306;&#35199;6 &#21021;&#24515;&#32773;&#12524;&#12483;&#12473;&#12531;&#30330;&#23637;&#35506;&#38988;&#12398;&#35299;&#31572;&#20363;</title>
      <description>&lt;p&gt;&#30330;&#23637;&#35506;&#38988;&#12398;&#35299;&#31572;&#12434;&#29992;&#24847;&#12375;&#12390;&#12415;&#12414;&#12375;&#12383;&#12290;&lt;br/&gt;
&#19968;&#35299;&#31572;&#20363;&#12395;&#12377;&#12366;&#12414;&#12379;&#12435;&#12364;&#12289;&#21442;&#32771;&#12395;&#12375;&#12390;&#12367;&#12384;&#12373;&#12356;&#12290;&lt;/p&gt;

&lt;p&gt;&#24613;&#12356;&#12391;&#20316;&#12387;&#12383;&#12398;&#12391;&#38291;&#36949;&#12387;&#12390;&#12383;&#12425;&#12484;&#12483;&#12467;&#12435;&#12391;&#12367;&#12384;&#12373;&#12356;&#12290;&lt;/p&gt;

&lt;h3&gt;:per_page &#12395;&#25351;&#23450;&#12375;&#12383;&#25968;&#23383;&#12395;&#21512;&#12431;&#12379;&#12390;&#12289;&#21069;&#12398;&#12531;&#20214;, &#27425;&#12398;&#12531;&#20214;&#12392;&#12375;&#12390;&#12415;&#12424;&#12358;&#12290;&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;ActionController::Pagination::Paginator#items_per_page&lt;/code&gt;&#12434;&#20351;&#12387;&#12390;&#12289;&lt;br/&gt;
&lt;code&gt;$ vi app/views/bbs/list.rhtml&lt;/code&gt;&lt;/p&gt;

&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_rhtml "&gt;&lt;span class="punct"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="ident"&gt;link_to&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;&#21069;&#12398;&lt;span class="expr"&gt;#{@comment_pages.items_per_page}&lt;/span&gt;&#20214;&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;,&lt;/span&gt; &lt;span class="punct"&gt;{&lt;/span&gt; &lt;span class="symbol"&gt;:page&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="attribute"&gt;@comment_pages&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;current&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;previous&lt;/span&gt; &lt;span class="punct"&gt;}&lt;/span&gt;
            &lt;span class="keyword"&gt;if&lt;/span&gt; &lt;span class="attribute"&gt;@comment_pages&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;current&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;previous&lt;/span&gt; &lt;span class="punct"&gt;%&amp;gt;&lt;/span&gt;
&lt;span class="punct"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="ident"&gt;link_to&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;&#27425;&#12398;&lt;span class="expr"&gt;#{@comment_pages.items_per_page}&lt;/span&gt;&#20214;&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;,&lt;/span&gt; &lt;span class="punct"&gt;{&lt;/span&gt; &lt;span class="symbol"&gt;:page&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="attribute"&gt;@comment_pages&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;current&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;next&lt;/span&gt; &lt;span class="punct"&gt;}&lt;/span&gt;
            &lt;span class="keyword"&gt;if&lt;/span&gt; &lt;span class="attribute"&gt;@comment_pages&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;current&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;next&lt;/span&gt; &lt;span class="punct"&gt;%&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&#12522;&#12501;&#12449;&#12524;&#12531;&#12473;&#12510;&#12491;&#12517;&#12450;&#12523;&#12391;&#12399;&#12289;Attributes&#12398;&#12392;&#12371;&#12429;&#12395;&#12354;&#12387;&#12390;&#12289;&#12394;&#12435;&#12398;&#35500;&#26126;&#12418;&#12394;&#12356;&#12398;&#12391;&#12289;&#35211;&#12388;&#12369;&#12395;&#12367;&#12356;&#12363;&#12418;&#12375;&#12428;&#12414;&#12379;&#12435;&#12290;&lt;/p&gt;

&lt;h3&gt;http://localhost:3000/bbs/edit/1 &#12392;&#35328;&#12358;&#39080;&#12395;&#30452;&#25509;&#12450;&#12463;&#12475;&#12473;&#12377;&#12427;&#12392;&#12289;&#35504;&#12398;&#30330;&#35328;&#12391;&#12418;&#33258;&#30001;&#12395;&#32232;&#38598;&#12391;&#12365;&#12390;&#12375;&#12414;&#12358;&#12290;&#12467;&#12531;&#12488;&#12525;&#12540;&#12521;&#12363;&#12425;&#20351;&#12387;&#12390;&#12394;&#12356;&#12513;&#12477;&#12483;&#12489;&#12434;&#21066;&#38500;&#12375;&#12390;&#12289;&#32232;&#38598;&#12364;&#12391;&#12365;&#12394;&#12356;&#12424;&#12358;&#12395;&#12375;&#12424;&#12358;&#12290;&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;app/controllers/bbs_controller.rb&lt;/code&gt;&#20013;&#12398;&#12289;&lt;code&gt;edit,show,update&lt;/code&gt;&#12513;&#12477;&#12483;&#12489;&#12434;&#21066;&#38500;&#12375;&#12289;verify &#12398;&#34892;&#12395;&#12354;&#12427;&#12289;:update&#12418;&#28040;&#12377;&#12290;&lt;br/&gt;
&lt;code&gt;app/views/bbs/edit.rhtml&lt;/code&gt;&#12392;&lt;code&gt;app/views/bbs/show.rhtml&lt;/code&gt;&#20108;&#12388;&#12398;&#12501;&#12449;&#12452;&#12523;&#12418;&#28040;&#12375;&#12414;&#12377;&#12290;&lt;/p&gt;

&lt;h3&gt;&#25237;&#31295;&#12501;&#12457;&#12540;&#12512;&#12434; /list/bbs &#12398;&#19968;&#30058;&#19978;&#12395;&#31227;&#21205;&#12375;&#12390;&#12289;&#30452;&#25509;&#25237;&#31295;&#12391;&#12365;&#12427;&#12424;&#12358;&#12395;&#12375;&#12390;&#12415;&#12424;&#12358;&#12290;&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;app/views/bbs/list.rhtml&lt;/code&gt;&#12398;&#19978;&#12398;&#26041;&#12395;&#12289;&lt;/p&gt;

&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_rhtml "&gt;&lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tag"&gt;div&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="punct"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="ident"&gt;start_form_tag&lt;/span&gt; &lt;span class="symbol"&gt;:action&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;create&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="punct"&gt;%&amp;gt;&lt;/span&gt;
    &lt;span class="punct"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="ident"&gt;render&lt;/span&gt; &lt;span class="symbol"&gt;:partial&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;form&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="punct"&gt;%&amp;gt;&lt;/span&gt;
    &lt;span class="punct"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="ident"&gt;submit_tag&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;&#25237;&#31295;&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="punct"&gt;%&amp;gt;&lt;/span&gt;
  &lt;span class="punct"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="ident"&gt;end_form_tag&lt;/span&gt; &lt;span class="punct"&gt;%&amp;gt;&lt;/span&gt;
&lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tag"&gt;div&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&#12434;&#36861;&#21152;&#12290;&lt;/p&gt;

&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="comment"&gt;# app/controllers/bbs_controller.rb&lt;/span&gt;
   &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;list&lt;/span&gt;
     &lt;span class="attribute"&gt;@comment_pages&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="attribute"&gt;@comments&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="ident"&gt;paginate&lt;/span&gt; &lt;span class="symbol"&gt;:comments&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="symbol"&gt;:per_page&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="number"&gt;10&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="symbol"&gt;:order&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;created_at desc&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt;
     &lt;span class="attribute"&gt;@comment&lt;/span&gt; &lt;span class="punct"&gt;||=&lt;/span&gt; &lt;span class="constant"&gt;Comment&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;new&lt;/span&gt; &lt;span class="comment"&gt;# ||= &#12399;&#12289;create &#12363;&#12425;&#21628;&#12400;&#12428;&#12383;&#26178;&#12395;@comment&#12434;&#19978;&#26360;&#12365;&#12375;&#12394;&#12356;&#12383;&#12417;&#12290;&lt;/span&gt;
   &lt;span class="keyword"&gt;end&lt;/span&gt;

   &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;create&lt;/span&gt;
     &lt;span class="attribute"&gt;@comment&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="constant"&gt;Comment&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;new&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;params&lt;/span&gt;&lt;span class="punct"&gt;[&lt;/span&gt;&lt;span class="symbol"&gt;:comment&lt;/span&gt;&lt;span class="punct"&gt;])&lt;/span&gt;
     &lt;span class="keyword"&gt;if&lt;/span&gt; &lt;span class="attribute"&gt;@comment&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;save&lt;/span&gt;
       &lt;span class="ident"&gt;flash&lt;/span&gt;&lt;span class="punct"&gt;[&lt;/span&gt;&lt;span class="symbol"&gt;:notice&lt;/span&gt;&lt;span class="punct"&gt;]&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;Comment was successfully created.&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt;
       &lt;span class="ident"&gt;redirect_to&lt;/span&gt; &lt;span class="symbol"&gt;:action&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;list&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt;
     &lt;span class="keyword"&gt;else&lt;/span&gt;
       &lt;span class="ident"&gt;list&lt;/span&gt; &lt;span class="comment"&gt;# &#12371;&#12398;&#34892;&#36861;&#21152;&lt;/span&gt;
       &lt;span class="ident"&gt;render&lt;/span&gt; &lt;span class="symbol"&gt;:action&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;list&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="comment"&gt;# &#12456;&#12521;&#12540;&#12364;&#12354;&#12387;&#12383;&#22580;&#21512;&#12398;&#25147;&#12426;&#20808;&#12434;&#22793;&#26356;&lt;/span&gt;
     &lt;span class="keyword"&gt;end&lt;/span&gt;
   &lt;span class="keyword"&gt;end&lt;/span&gt;

   &lt;span class="comment"&gt;# new &#12450;&#12463;&#12471;&#12519;&#12531;&#12399;&#21066;&#38500;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;code&gt;app/views/bbs/new.rhtml&lt;/code&gt;&#12418;&#28040;&#12375;&#12390;&#12375;&#12414;&#12356;&#12414;&#12375;&#12423;&#12358;&#12290;&lt;/p&gt;

&lt;h3&gt;Comment&#12395;validates&#12434;&#36861;&#21152;&#12375;&#12390;&#12289;&#24517;&#38920;&#38917;&#30446;&#12434;&#27770;&#12417;&#12424;&#12358;&#12290;&lt;/h3&gt;

&lt;p&gt;title, body, name &#12434;&#24517;&#38920;&#38917;&#30446;&#12395;&#12289;email, homapage &#12399;&#31354;&#12376;&#12419;&#12394;&#12363;&#12387;&#12383;&#12425;&#12289;&#27491;&#35215;&#34920;&#29694;&#12391;&#21028;&#23450;&#12434;&#12375;&#12390;&#12356;&#12414;&#12377;&#12290;
email &#12398;&#26041;&#12398;&#27491;&#35215;&#34920;&#29694;&#12399;&#12289; validates_format_of &#12398;&#12469;&#12531;&#12503;&#12523;&#12467;&#12540;&#12489;&#12363;&#12425;&#12289;homepage&#12398;&#26041;&#12399;&#20808;&#38957;&#12364;http://&#12414;&#12383;&#12399;https://&#12363;&#12434;&#12481;&#12455;&#12483;&#12463;&#12375;&#12390;&#12356;&#12414;&#12377;&#12290;
&#20957;&#12426;&#12383;&#12356;&#20154;&#12399;&#12393;&#12358;&#12382;&#12290;&lt;/p&gt;

&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="comment"&gt;# app/models/comment.rb&lt;/span&gt;
&lt;span class="keyword"&gt;class &lt;/span&gt;&lt;span class="class"&gt;Comment&lt;/span&gt; &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt; &lt;span class="constant"&gt;ActiveRecord&lt;/span&gt;&lt;span class="punct"&gt;::&lt;/span&gt;&lt;span class="constant"&gt;Base&lt;/span&gt;
  &lt;span class="ident"&gt;validates_presence_of&lt;/span&gt; &lt;span class="punct"&gt;[&lt;/span&gt;&lt;span class="symbol"&gt;:title&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="symbol"&gt;:body&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="symbol"&gt;:name&lt;/span&gt;&lt;span class="punct"&gt;]&lt;/span&gt;
  &lt;span class="ident"&gt;validates_format_of&lt;/span&gt; &lt;span class="symbol"&gt;:email&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="symbol"&gt;:with&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;/&lt;/span&gt;&lt;span class="regex"&gt;^([^@&lt;span class="escape"&gt;\s&lt;/span&gt;]+)@((?:[-a-z0-9]+&lt;span class="escape"&gt;\.&lt;/span&gt;)+[a-z]{2,})$&lt;/span&gt;&lt;span class="punct"&gt;/&lt;/span&gt;&lt;span class="ident"&gt;i&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="symbol"&gt;:if&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="ident"&gt;proc&lt;/span&gt;&lt;span class="punct"&gt;{|&lt;/span&gt;&lt;span class="ident"&gt;comment&lt;/span&gt;&lt;span class="punct"&gt;|&lt;/span&gt; &lt;span class="punct"&gt;!&lt;/span&gt;&lt;span class="ident"&gt;comment&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;email&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;blank?&lt;/span&gt;&lt;span class="punct"&gt;}&lt;/span&gt;
  &lt;span class="ident"&gt;validates_format_of&lt;/span&gt; &lt;span class="symbol"&gt;:homepage&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="symbol"&gt;:with&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;%r|&lt;/span&gt;&lt;span class="regex"&gt;^https?://&lt;/span&gt;&lt;span class="punct"&gt;|,&lt;/span&gt; &lt;span class="symbol"&gt;:if&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="ident"&gt;proc&lt;/span&gt;&lt;span class="punct"&gt;{|&lt;/span&gt;&lt;span class="ident"&gt;comment&lt;/span&gt;&lt;span class="punct"&gt;|&lt;/span&gt; &lt;span class="punct"&gt;!&lt;/span&gt;&lt;span class="ident"&gt;comment&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;homepage&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;blank?&lt;/span&gt;&lt;span class="punct"&gt;}&lt;/span&gt;
&lt;span class="keyword"&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&#12414;&#12383;&#12289;&#27425;&#12398;&#12424;&#12358;&#12394;&#12486;&#12473;&#12488;&#12467;&#12540;&#12489;&#12434;&#26360;&#12356;&#12390;&#12289;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;$ rake test:units&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&#12434;&#23455;&#34892;&#12377;&#12427;&#12371;&#12392;&#12391;&#12289;&#27491;&#12375;&#12381;&#12358;&#12395;&#21205;&#12356;&#12390;&#12356;&#12427;&#12363;&#12481;&#12455;&#12483;&#12463;&#12391;&#12365;&#12414;&#12377;&#12290;&lt;/p&gt;

&lt;p&gt;&#12486;&#12473;&#12488;&#12467;&#12540;&#12489;&#8595;&#12434;&#26360;&#12356;&#12390;&#12363;&#12425;&#12289;&#23455;&#35013;&#8593;&#12434;&#26360;&#12367;&#12392;&#12289;TDD.&lt;/p&gt;

&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="comment"&gt;# test/unit/comment_test.rb&lt;/span&gt;
&lt;span class="ident"&gt;require&lt;/span&gt; &lt;span class="constant"&gt;File&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;dirname&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="constant"&gt;__FILE__&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt; &lt;span class="punct"&gt;+&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;/../test_helper&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt;

&lt;span class="keyword"&gt;class &lt;/span&gt;&lt;span class="class"&gt;CommentTest&lt;/span&gt; &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt; &lt;span class="constant"&gt;Test&lt;/span&gt;&lt;span class="punct"&gt;::&lt;/span&gt;&lt;span class="constant"&gt;Unit&lt;/span&gt;&lt;span class="punct"&gt;::&lt;/span&gt;&lt;span class="constant"&gt;TestCase&lt;/span&gt;
  &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;setup&lt;/span&gt;
    &lt;span class="attribute"&gt;@comment&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="constant"&gt;Comment&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;new&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="symbol"&gt;:title&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;hi!&lt;/span&gt;&lt;span class="punct"&gt;',&lt;/span&gt; &lt;span class="symbol"&gt;:body&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;hello!&lt;/span&gt;&lt;span class="punct"&gt;',&lt;/span&gt; &lt;span class="symbol"&gt;:name&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;bob&lt;/span&gt;&lt;span class="punct"&gt;',&lt;/span&gt; &lt;span class="symbol"&gt;:email&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;,&lt;/span&gt; &lt;span class="symbol"&gt;:homepage&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;)&lt;/span&gt;
  &lt;span class="keyword"&gt;end&lt;/span&gt;

  &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;test_validation&lt;/span&gt;
    &lt;span class="ident"&gt;assert_valid&lt;/span&gt; &lt;span class="attribute"&gt;@comment&lt;/span&gt;
  &lt;span class="keyword"&gt;end&lt;/span&gt;

  &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;test_presence_on_title&lt;/span&gt;
    &lt;span class="attribute"&gt;@comment&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;title&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="constant"&gt;nil&lt;/span&gt;
    &lt;span class="attribute"&gt;@comment&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;save&lt;/span&gt;
    &lt;span class="ident"&gt;assert_not_nil&lt;/span&gt; &lt;span class="attribute"&gt;@comment&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;errors&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;on&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="symbol"&gt;:title&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;
  &lt;span class="keyword"&gt;end&lt;/span&gt;

  &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;test_presence_on_body&lt;/span&gt;
    &lt;span class="attribute"&gt;@comment&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;body&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="constant"&gt;nil&lt;/span&gt;
    &lt;span class="attribute"&gt;@comment&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;save&lt;/span&gt;
    &lt;span class="ident"&gt;assert_not_nil&lt;/span&gt; &lt;span class="attribute"&gt;@comment&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;errors&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;on&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="symbol"&gt;:body&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;
  &lt;span class="keyword"&gt;end&lt;/span&gt;

  &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;test_presence_on_name&lt;/span&gt;
    &lt;span class="attribute"&gt;@comment&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;name&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="constant"&gt;nil&lt;/span&gt;
    &lt;span class="attribute"&gt;@comment&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;save&lt;/span&gt;
    &lt;span class="ident"&gt;assert_not_nil&lt;/span&gt; &lt;span class="attribute"&gt;@comment&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;errors&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;on&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="symbol"&gt;:name&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;
  &lt;span class="keyword"&gt;end&lt;/span&gt;

  &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;test_email&lt;/span&gt;
    &lt;span class="attribute"&gt;@comment&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;email&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;bob@rails6.com&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt;
    &lt;span class="attribute"&gt;@comment&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;save&lt;/span&gt;
    &lt;span class="ident"&gt;assert_valid&lt;/span&gt; &lt;span class="attribute"&gt;@comment&lt;/span&gt;

    &lt;span class="attribute"&gt;@comment&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;email&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;bob.rails6.com&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt;
    &lt;span class="attribute"&gt;@comment&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;save&lt;/span&gt;
    &lt;span class="ident"&gt;assert_not_nil&lt;/span&gt; &lt;span class="attribute"&gt;@comment&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;errors&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;on&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="symbol"&gt;:email&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;
  &lt;span class="keyword"&gt;end&lt;/span&gt;

  &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;test_homepage&lt;/span&gt;
    &lt;span class="attribute"&gt;@comment&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;homepage&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;https://bob.rails6.com&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt;
    &lt;span class="attribute"&gt;@comment&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;save&lt;/span&gt;
    &lt;span class="ident"&gt;assert_valid&lt;/span&gt; &lt;span class="attribute"&gt;@comment&lt;/span&gt;

    &lt;span class="attribute"&gt;@comment&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;homepage&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;http://bob.rails6.com&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt;
    &lt;span class="attribute"&gt;@comment&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;save&lt;/span&gt;
    &lt;span class="ident"&gt;assert_valid&lt;/span&gt; &lt;span class="attribute"&gt;@comment&lt;/span&gt;

    &lt;span class="attribute"&gt;@comment&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;homepage&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;ftp://bob.rails6.com&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt;
    &lt;span class="attribute"&gt;@comment&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;save&lt;/span&gt;
    &lt;span class="ident"&gt;assert_not_nil&lt;/span&gt; &lt;span class="attribute"&gt;@comment&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;errors&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;on&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="symbol"&gt;:homepage&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;
  &lt;span class="keyword"&gt;end&lt;/span&gt;
&lt;span class="keyword"&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;&#21066;&#38500;&#12461;&#12540;&#12434;&#20837;&#21147;&#12375;&#12394;&#12356;&#12392;&#21066;&#38500;&#12391;&#12365;&#12394;&#12356;&#12424;&#12358;&#12395;&#12375;&#12390;&#12415;&#12424;&#12358;&#12290;&lt;/h3&gt;

&lt;p&gt;&#12414;&#12378;&#12289;migration &#12391;delete_key &#12392;&#12356;&#12358;&#12459;&#12521;&#12512;&#12434;&#36861;&#21152;&#12375;&#12414;&#12377;&#12290;&lt;/p&gt;

&lt;div class="typocode"&gt;&lt;pre class='prettyprint'&gt;&lt;code class="typocode_default "&gt;$ script/generate migration AddDeleteKey
      exists  db/migrate
      create  db/migrate/004_add_delete_key.rb&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="comment"&gt;# vi db/migrate/004_add_delete_key.rb&lt;/span&gt;
&lt;span class="keyword"&gt;class &lt;/span&gt;&lt;span class="class"&gt;AddDeleteKey&lt;/span&gt; &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt; &lt;span class="constant"&gt;ActiveRecord&lt;/span&gt;&lt;span class="punct"&gt;::&lt;/span&gt;&lt;span class="constant"&gt;Migration&lt;/span&gt;
  &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;self.up&lt;/span&gt;
    &lt;span class="ident"&gt;add_column&lt;/span&gt; &lt;span class="symbol"&gt;:comments&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="symbol"&gt;:delete_key&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="symbol"&gt;:string&lt;/span&gt;
  &lt;span class="keyword"&gt;end&lt;/span&gt;

  &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;self.down&lt;/span&gt;
    &lt;span class="ident"&gt;remove_column&lt;/span&gt; &lt;span class="symbol"&gt;:comments&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="symbol"&gt;:delete_key&lt;/span&gt;
  &lt;span class="keyword"&gt;end&lt;/span&gt;
&lt;span class="keyword"&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;code&gt;$ rake db:migrate&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&#27425;&#12395;&#12289;&#25237;&#31295;&#12501;&#12457;&#12540;&#12512;&#12395;&#12289;&#21066;&#38500;&#12461;&#12540;&#20837;&#21147;&#12501;&#12451;&#12540;&#12523;&#12489;&#12434;&#20316;&#12426;&#12289;&lt;/p&gt;

&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_rhtml "&gt;&lt;span class="comment"&gt;&amp;lt;!-- app/views/bbs/_form.rhtml --&amp;gt;&lt;/span&gt;
&lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tag"&gt;p&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="tag"&gt;label&lt;/span&gt; &lt;span class="attribute"&gt;for&lt;/span&gt;&lt;span class="punct"&gt;=&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;comment_delete_key&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&amp;gt;&lt;/span&gt;&#21066;&#38500;&#12461;&#12540;&lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tag"&gt;label&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="tag"&gt;br&lt;/span&gt;&lt;span class="punct"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="punct"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="ident"&gt;text_field&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;comment&lt;/span&gt;&lt;span class="punct"&gt;',&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;delete_key&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt;  &lt;span class="punct"&gt;%&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="tag"&gt;p&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&#21066;&#38500;&#12508;&#12479;&#12531;&#12398;&#12392;&#12394;&#12426;&#12395;&#12486;&#12461;&#12473;&#12488;&#12501;&#12451;&#12540;&#12523;&#12489;&#12434;&#36861;&#21152;&#12290;&lt;/p&gt;

&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_rhtml "&gt;&lt;span class="comment"&gt;&amp;lt;!-- app/views/bbs/list.rhtml --&amp;gt;&lt;/span&gt;
     &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tag"&gt;td&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;&#25237;&#31295;&#26085;&#26178;:&lt;span class="punct"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="ident"&gt;comment&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;created_at&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;strftime&lt;/span&gt;&lt;span class="punct"&gt;(&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;%Y/%m/%d %H:%M:%S&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;)&lt;/span&gt; &lt;span class="punct"&gt;%&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="tag"&gt;td&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
     &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt;&lt;span class="tag"&gt;td&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;
       &lt;span class="punct"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="ident"&gt;start_form_tag&lt;/span&gt; &lt;span class="symbol"&gt;:action&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;destroy&lt;/span&gt;&lt;span class="punct"&gt;',&lt;/span&gt; &lt;span class="symbol"&gt;:id&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="ident"&gt;comment&lt;/span&gt; &lt;span class="punct"&gt;%&amp;gt;&lt;/span&gt;
       &lt;span class="punct"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="ident"&gt;text_field_tag&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;delete_key&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt; &lt;span class="punct"&gt;%&amp;gt;&lt;/span&gt;
       &lt;span class="punct"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="ident"&gt;submit_tag&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;&#21066;&#38500;&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt; &lt;span class="punct"&gt;%&amp;gt;&lt;/span&gt;
       &lt;span class="punct"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="ident"&gt;end_form_tag&lt;/span&gt; &lt;span class="punct"&gt;%&amp;gt;&lt;/span&gt;
     &lt;span class="punct"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="tag"&gt;td&lt;/span&gt;&lt;span class="punct"&gt;&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&#12381;&#12398;&#20516;&#12434;&#21463;&#12369;&#12390;&#12289;&#20445;&#23384;&#12373;&#12428;&#12383;&#21066;&#38500;&#12461;&#12540;&#12392;&#12289;&#20837;&#21147;&#12373;&#12428;&#12383;&#21066;&#38500;&#12461;&#12540;&#12364;&#19968;&#33268;&#12375;&#12394;&#12356;&#12392;destroy&#12375;&#12394;&#12356;&#12424;&#12358;&#12395;&#12289;&#12467;&#12531;&#12488;&#12525;&#12540;&#12521;&#12434;&#26360;&#12365;&#25563;&#12360;&#12427;&#12290;&lt;/p&gt;

&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="comment"&gt;# app/controllers/bbs_controller.rb&lt;/span&gt;
   &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;destroy&lt;/span&gt;
     &lt;span class="ident"&gt;c&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="constant"&gt;Comment&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;find&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;params&lt;/span&gt;&lt;span class="punct"&gt;[&lt;/span&gt;&lt;span class="symbol"&gt;:id&lt;/span&gt;&lt;span class="punct"&gt;])&lt;/span&gt;
     &lt;span class="ident"&gt;c&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;destroy&lt;/span&gt; &lt;span class="keyword"&gt;if&lt;/span&gt; &lt;span class="punct"&gt;!&lt;/span&gt;&lt;span class="ident"&gt;c&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;delete_key&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;blank?&lt;/span&gt; &lt;span class="punct"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="ident"&gt;c&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;delete_key&lt;/span&gt; &lt;span class="punct"&gt;==&lt;/span&gt; &lt;span class="ident"&gt;params&lt;/span&gt;&lt;span class="punct"&gt;[&lt;/span&gt;&lt;span class="symbol"&gt;:delete_key&lt;/span&gt;&lt;span class="punct"&gt;]&lt;/span&gt;
     &lt;span class="ident"&gt;redirect_to&lt;/span&gt; &lt;span class="symbol"&gt;:action&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;list&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt;
   &lt;span class="keyword"&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&#20170;&#22238;&#12398;&#12486;&#12473;&#12488;&#12467;&#12540;&#12489;&#12399;&#12289;&#12467;&#12531;&#12488;&#12525;&#12540;&#12521;&#12398;&#12486;&#12473;&#12488;&#12394;&#12398;&#12391;&#12289;&#20197;&#19979;&#12398;&#36890;&#12426;&#12290;&lt;/p&gt;

&lt;p&gt;&#12414;&#12378;&#12289;&#12486;&#12473;&#12488;&#12487;&#12540;&#12479;&#12434;&#20108;&#12388;&#29992;&#24847;&#12290;
&#29255;&#26041;&#12399;&#12289;&#21066;&#38500;&#12461;&#12540;&amp;#8217;bob123&amp;#8217;&#12289;&#29255;&#26041;&#12399;&#21066;&#38500;&#12461;&#12540;&#12394;&#12375;(&#21066;&#38500;&#12391;&#12365;&#12394;&#12356;)&lt;/p&gt;

&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_yaml "&gt;&lt;span class="comment"&gt;# test/fixtures/comments.rb&lt;/span&gt;
&lt;span class="key"&gt;bob&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;
  &lt;span class="key"&gt;id&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt; 1
  &lt;span class="key"&gt;title&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt; hi
  &lt;span class="key"&gt;body&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt; hello
  &lt;span class="key"&gt;name&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt; bob
  &lt;span class="key"&gt;delete_key&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt; bob123
&lt;span class="key"&gt;undeletable&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt;
  &lt;span class="key"&gt;id&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt; 2
  &lt;span class="key"&gt;title&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt; hi
  &lt;span class="key"&gt;body&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt; hello
  &lt;span class="key"&gt;name&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt; bob
  &lt;span class="key"&gt;delete_key&lt;/span&gt;&lt;span class="punct"&gt;:&lt;/span&gt; &lt;span class="punct"&gt;''&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="comment"&gt;# test/functional/bbs_controller_test.rb&lt;/span&gt;
&lt;span class="ident"&gt;require&lt;/span&gt; &lt;span class="constant"&gt;File&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;dirname&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="constant"&gt;__FILE__&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt; &lt;span class="punct"&gt;+&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;/../test_helper&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt;
&lt;span class="ident"&gt;require&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;bbs_controller&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt;

&lt;span class="comment"&gt;# Re-raise errors caught by the controller.&lt;/span&gt;
&lt;span class="keyword"&gt;class &lt;/span&gt;&lt;span class="class"&gt;BbsController&lt;/span&gt;&lt;span class="punct"&gt;;&lt;/span&gt; &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;rescue_action&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;e&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt; &lt;span class="keyword"&gt;raise&lt;/span&gt; &lt;span class="ident"&gt;e&lt;/span&gt; &lt;span class="keyword"&gt;end&lt;/span&gt;&lt;span class="punct"&gt;;&lt;/span&gt; &lt;span class="keyword"&gt;end&lt;/span&gt;

&lt;span class="keyword"&gt;class &lt;/span&gt;&lt;span class="class"&gt;BbsControllerTest&lt;/span&gt; &lt;span class="punct"&gt;&amp;lt;&lt;/span&gt; &lt;span class="constant"&gt;Test&lt;/span&gt;&lt;span class="punct"&gt;::&lt;/span&gt;&lt;span class="constant"&gt;Unit&lt;/span&gt;&lt;span class="punct"&gt;::&lt;/span&gt;&lt;span class="constant"&gt;TestCase&lt;/span&gt;
  &lt;span class="comment"&gt;# &#12486;&#12473;&#12488;&#29992;&#12487;&#12540;&#12479;&#12391;&#12354;&#12427;&#12289;fixture &#12434;&#12525;&#12540;&#12489;&#12290;(&#19978;&#12391;&#26360;&#12356;&#12383;&#12420;&#12388;)&lt;/span&gt;
  &lt;span class="ident"&gt;fixtures&lt;/span&gt; &lt;span class="symbol"&gt;:comments&lt;/span&gt;

  &lt;span class="comment"&gt;# test_* &#12398;&#21069;&#12395;&#23455;&#34892;&#12373;&#12428;&#12427;&#12290;&lt;/span&gt;
  &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;setup&lt;/span&gt;
    &lt;span class="attribute"&gt;@controller&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="constant"&gt;BbsController&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;new&lt;/span&gt;
    &lt;span class="attribute"&gt;@request&lt;/span&gt;    &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="constant"&gt;ActionController&lt;/span&gt;&lt;span class="punct"&gt;::&lt;/span&gt;&lt;span class="constant"&gt;TestRequest&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;new&lt;/span&gt;
    &lt;span class="attribute"&gt;@response&lt;/span&gt;   &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="constant"&gt;ActionController&lt;/span&gt;&lt;span class="punct"&gt;::&lt;/span&gt;&lt;span class="constant"&gt;TestResponse&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;new&lt;/span&gt;
  &lt;span class="keyword"&gt;end&lt;/span&gt;

  &lt;span class="comment"&gt;# &#21066;&#38500;&#12461;&#12540;&#12434;&#25351;&#23450;&#12375;&#12394;&#12356;&#12392;&#21066;&#38500;&#12373;&#12428;&#12394;&#12356;&lt;/span&gt;
  &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;test_destroy_without_delete_key&lt;/span&gt;
    &lt;span class="ident"&gt;id&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="ident"&gt;comments&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="symbol"&gt;:bob&lt;/span&gt;&lt;span class="punct"&gt;).&lt;/span&gt;&lt;span class="ident"&gt;id&lt;/span&gt;
    &lt;span class="ident"&gt;assert_not_nil&lt;/span&gt; &lt;span class="constant"&gt;Comment&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;find&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;id&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;
    &lt;span class="ident"&gt;post&lt;/span&gt; &lt;span class="symbol"&gt;:destroy&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="symbol"&gt;:id&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="ident"&gt;id&lt;/span&gt;
    &lt;span class="ident"&gt;assert_not_nil&lt;/span&gt; &lt;span class="constant"&gt;Comment&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;find&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;id&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;
  &lt;span class="keyword"&gt;end&lt;/span&gt;

  &lt;span class="comment"&gt;# &#21066;&#38500;&#12461;&#12540;&#12434;&#25351;&#23450;&#12377;&#12427;&#12392;&#21066;&#38500;&#12373;&#12428;&#12427;&lt;/span&gt;
  &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;test_destroy_with_delete_key&lt;/span&gt;
    &lt;span class="ident"&gt;id&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="ident"&gt;comments&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="symbol"&gt;:bob&lt;/span&gt;&lt;span class="punct"&gt;).&lt;/span&gt;&lt;span class="ident"&gt;id&lt;/span&gt;
    &lt;span class="ident"&gt;assert_not_nil&lt;/span&gt; &lt;span class="constant"&gt;Comment&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;find&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;id&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;
    &lt;span class="ident"&gt;post&lt;/span&gt; &lt;span class="symbol"&gt;:destroy&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="symbol"&gt;:id&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="ident"&gt;id&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="symbol"&gt;:delete_key&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="ident"&gt;comments&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="symbol"&gt;:bob&lt;/span&gt;&lt;span class="punct"&gt;).&lt;/span&gt;&lt;span class="ident"&gt;delete_key&lt;/span&gt;
    &lt;span class="ident"&gt;assert_raise&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="constant"&gt;ActiveRecord&lt;/span&gt;&lt;span class="punct"&gt;::&lt;/span&gt;&lt;span class="constant"&gt;RecordNotFound&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt; &lt;span class="punct"&gt;{&lt;/span&gt;
      &lt;span class="constant"&gt;Comment&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;find&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;id&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;
    &lt;span class="punct"&gt;}&lt;/span&gt;
  &lt;span class="keyword"&gt;end&lt;/span&gt;

  &lt;span class="comment"&gt;# &#21066;&#38500;&#12461;&#12540;&#12364;&#31354;&#12398;&#12524;&#12467;&#12540;&#12489;&#12399;&#12289;&#31354;&#12398;&#21066;&#38500;&#12461;&#12540;&#12391;&#21066;&#38500;&#12391;&#12365;&#12394;&#12356;&lt;/span&gt;
  &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;test_destroy_record_having_empty_delete_key&lt;/span&gt;
    &lt;span class="ident"&gt;id&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="ident"&gt;comments&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="symbol"&gt;:undeletable&lt;/span&gt;&lt;span class="punct"&gt;).&lt;/span&gt;&lt;span class="ident"&gt;id&lt;/span&gt;
    &lt;span class="ident"&gt;assert_not_nil&lt;/span&gt; &lt;span class="constant"&gt;Comment&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;find&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;id&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;
    &lt;span class="ident"&gt;post&lt;/span&gt; &lt;span class="symbol"&gt;:destroy&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="symbol"&gt;:id&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="ident"&gt;id&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="symbol"&gt;:delete_key&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="ident"&gt;comments&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="symbol"&gt;:undeletable&lt;/span&gt;&lt;span class="punct"&gt;).&lt;/span&gt;&lt;span class="ident"&gt;delete_key&lt;/span&gt;
    &lt;span class="ident"&gt;assert_not_nil&lt;/span&gt; &lt;span class="constant"&gt;Comment&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;find&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;id&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;
  &lt;span class="keyword"&gt;end&lt;/span&gt;
&lt;span class="keyword"&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
      <pubDate>Mon, 22 Jan 2007 20:26:00 +0900</pubDate>
      <guid isPermaLink="false">urn:uuid:d968dd21-24fb-4c86-be5e-d9b701a1c1d9</guid>
      <author>nanki</author>
      <link>http://blog.netswitch.jp/articles/2007/01/22/rails-kansai-6-answer</link>
      <category>life</category>
      <category>ruby</category>
      <category>rails</category>
      <category>kansai</category>
      <trackback:ping>http://blog.netswitch.jp/articles/trackback/4853</trackback:ping>
    </item>
    <item>
      <title>Rubyist SNS &#12398;URL</title>
      <description>&lt;p&gt;&#21193;&#24375;&#20250;&#12398;&#36884;&#20013;&#12391;&#26368;&#26032;&#29256;&#12395;update&#12375;&#12390;&#12289;&#12467;&#12511;&#12517;&#12491;&#12486;&#12451;&#12398;&#26032;&#35215;&#20316;&#25104;&#27231;&#33021;&#12391;&#12418;&#23455;&#35013;&#12375;&#12424;&#12358;&#12289;&#12392;&#24605;&#12387;&#12390;&#12289;
&lt;code&gt;/community/new&lt;/code&gt; &#12392;&#12356;&#12358;URL&#12434;&#20351;&#12362;&#12358;&#12392;&#12375;&#12383;&#12425;&#12289;&lt;code&gt;/community/:community_name&lt;/code&gt; &#12392;&#12356;&#12358;&#39080;&#12395;&#12467;&#12511;&#12517;&#12491;&#12486;&#12451;&#12395;&#21517;&#21069;&#12391;&#12450;&#12463;&#12475;&#12473;&#12377;&#12427;&#20181;&#27096;&#12395;&#12394;&#12387;&#12390;&#12356;&#12427;&#12383;&#12417;&#12395;&#20351;&#12360;&#12394;&#12367;&#12394;&#12387;&#12390;&#12356;&#12427;&#12289;&#12393;&#12358;&#12375;&#12414;&#12375;&#12423;&#12358;&#12363;&#12290;&lt;/p&gt;

&lt;p&gt;&#12392;&#12356;&#12358;&#35441;&#12434;&#12289;&#25031;&#35242;&#20250;&#12391;&#12363;&#12378;&#12402;&#12371;&#12373;&#12435;&#12392;&#12375;&#12390;&#12356;&#12414;&#12375;&#12383;&#12290;&lt;/p&gt;

&lt;p&gt;&#35299;&#27770;&#26041;&#27861;&#12399;&#12356;&#12367;&#12425;&#12391;&#12418;&#12354;&#12427;&#12369;&#12393;&#12289;routes.rb&#12391;&#38929;&#24373;&#12426;&#12377;&#12366;&#12427;&#12392;&#12289;&#27231;&#33021;&#12364;&#22679;&#12360;&#12427;&#24230;&#12395;URL&#12434;&#32771;&#12360;&#12394;&#12356;&#12392;&#12356;&#12369;&#12394;&#12356;&#12375;&#12289;Rails &#12450;&#12503;&#12522;&#12465;&#12540;&#12471;&#12519;&#12531;&#12398;&#12469;&#12531;&#12503;&#12523;&#12467;&#12540;&#12489;&#30340;&#12394;&#12289;&#12392;&#12356;&#12358;&#12362;&#24441;&#30446;&#12418;&#32771;&#12360;&#12427;&#12392;&#12289;&#12362;&#32004;&#26463;&#12434;&#31309;&#26997;&#30340;&#12395;&#30772;&#12427;&#12289;&#12392;&#12356;&#12358;&#12398;&#12399;&#12393;&#12358;&#12394;&#12435;&#12384;&#12429;&#12358;&#12289;&#12392;&#12356;&#12358;&#12371;&#12392;&#12418;&#12354;&#12387;&#12390;&#12289;&#12385;&#12423;&#12387;&#12392;&#36855;&#12358;&#12290;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://dev.2750flesk.com/acts_as_sluggable/"&gt;acts_as_sluggable&lt;/a&gt;&#12392;&#12356;&#12358;&#12398;&#12434;&#20351;&#12358;&#12392;&#12289;link_to&#12398;&#32080;&#26524;&#12364;&#12289;&lt;code&gt;/community/show/1-ruby-kansai&lt;/code&gt; &#12415;&#12383;&#12356;&#12395;&#12394;&#12427;&#12381;&#12358;&#12394;&#12435;&#12391;&#12377;&#12364;&#12289;&#12371;&#12428;&#12394;&#12435;&#12390;&#12393;&#12358;&#12391;&#12375;&#12423;&#12358;&#12290;&lt;/p&gt;

&lt;h5&gt;&#21442;&#32771;&lt;/h5&gt;

&lt;p&gt;&lt;a href="http://www.fdiary.net/dev/sns/wiki"&gt;Rubyist SNS Trac&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Mon, 22 Jan 2007 18:34:00 +0900</pubDate>
      <guid isPermaLink="false">urn:uuid:93adb02f-0c64-4d87-99d4-b5f31daa5b04</guid>
      <author>nanki</author>
      <link>http://blog.netswitch.jp/articles/2007/01/22/rubyist-sns-routing</link>
      <category>tech</category>
      <category>ruby</category>
      <category>rails</category>
      <category>rubyist_sns</category>
      <trackback:ping>http://blog.netswitch.jp/articles/trackback/4852</trackback:ping>
    </item>
  </channel>
</rss>
