<?xml version="1.0" encoding="UTF-8" ?> <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>Ruby</title><link>http://blogs.wankuma.com/kazuki/category/1425.aspx</link><description>Ruby</description><managingEditor>kazuki@wankuma.com (かずき)</managingEditor><dc:language>ja-JP</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>kazuki@wankuma.com (かずき)</dc:creator><title>[Ruby][テスト]WatirでWebアプリの自動？テストが出来るらしい</title><link>http://blogs.wankuma.com/kazuki/archive/2008/06/12/143455.aspx</link><pubDate>Thu, 12 Jun 2008 23:26:00 GMT</pubDate><guid>http://blogs.wankuma.com/kazuki/archive/2008/06/12/143455.aspx</guid><wfw:comment>http://blogs.wankuma.com/kazuki/comments/143455.aspx</wfw:comment><comments>http://blogs.wankuma.com/kazuki/archive/2008/06/12/143455.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/kazuki/comments/commentRss/143455.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/kazuki/services/trackbacks/143455.aspx</trackback:ping><description>&lt;p&gt;まだ見てないけど、後で見るためのメモ！&lt;/p&gt; &lt;p&gt;&lt;a title="http://wtr.rubyforge.org/" href="http://wtr.rubyforge.org/"&gt;http://wtr.rubyforge.org/&lt;/a&gt;&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/kazuki/aggbug/143455.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>kazuki@wankuma.com (かずき)</dc:creator><title>[Ruby]__END__って便利なのね</title><link>http://blogs.wankuma.com/kazuki/archive/2008/05/12/137355.aspx</link><pubDate>Mon, 12 May 2008 18:22:00 GMT</pubDate><guid>http://blogs.wankuma.com/kazuki/archive/2008/05/12/137355.aspx</guid><wfw:comment>http://blogs.wankuma.com/kazuki/comments/137355.aspx</wfw:comment><comments>http://blogs.wankuma.com/kazuki/archive/2008/05/12/137355.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/kazuki/comments/commentRss/137355.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/kazuki/services/trackbacks/137355.aspx</trackback:ping><description>&lt;P&gt;__END__っていうものがあることを先日知った。&lt;BR&gt;知ったばっかりなので使いたくなるのが人情。&lt;/P&gt;
&lt;P&gt;ということで使った！！&lt;/P&gt;
&lt;P&gt;やっぱりRubyの用途は定型的なコードの自動生成が主なので、それ系になります。&lt;BR&gt;今日使ったのは、あるフォルダの中にあるファイル名をもとにXMLを作るというものでした。&lt;BR&gt;もっと具体的に言うと、あるフォルダ(javaのパッケージ)内にあるファイルをNetBeansのモジュールのlayer.xmlに登録するために&amp;lt;file name="...." url="nbresloc:/...." /&amp;gt;を作るというものです。&lt;/P&gt;
&lt;P&gt;使い捨てツールなので、さくっとね。&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;require 'erb'&lt;/P&gt;
&lt;P&gt;# 一覧を取得したいフォルダのパス&lt;BR&gt;PATH = "d:\\tmp"&lt;/P&gt;
&lt;P&gt;list = Dir.chdir(PATH) do&lt;BR&gt;&amp;nbsp; Dir["*.*"]&lt;BR&gt;end&lt;/P&gt;
&lt;P&gt;template = ERB.new DATA.readlines.join, nil, "-"&lt;BR&gt;template.run binding&lt;/P&gt;
&lt;P&gt;# __END__の後にERBのテンプレートを書く&lt;BR&gt;__END__&lt;BR&gt;&amp;lt;%- list.each do |name| -%&amp;gt;&lt;BR&gt;&amp;lt;file name="&amp;lt;%=name%&amp;gt;" url="nbresloc:/org/yourorghere/&amp;lt;%=name%&amp;gt; /&amp;gt;"&lt;BR&gt;&amp;lt;%- end -%&amp;gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P dir=ltr&gt;__END__って書くと、そこでプログラムのファイルの終端を表すのと、DATAという特殊な変数を使って、__END__以降のデータを読んだりできる。&lt;BR&gt;ということで、__END__以降にERBのテンプレートみたいなのを押し出すことが出来る。&lt;/P&gt;
&lt;P dir=ltr&gt;ヒアドキュメントよりも楽チンかも。&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/kazuki/aggbug/137355.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>kazuki@wankuma.com (かずき)</dc:creator><title>[NetBeans][Ruby]JRuby on Rails 2.0のscaffold</title><link>http://blogs.wankuma.com/kazuki/archive/2008/05/05/136398.aspx</link><pubDate>Mon, 05 May 2008 16:23:00 GMT</pubDate><guid>http://blogs.wankuma.com/kazuki/archive/2008/05/05/136398.aspx</guid><wfw:comment>http://blogs.wankuma.com/kazuki/comments/136398.aspx</wfw:comment><comments>http://blogs.wankuma.com/kazuki/archive/2008/05/05/136398.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/kazuki/comments/commentRss/136398.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/kazuki/services/trackbacks/136398.aspx</trackback:ping><description>&lt;p&gt;scaffoldで作られたコードとかを見てると、どうやら1.*系と違う形になってるみたいだ。&lt;br&gt;試しにrake routesで、どんな風にルーティングが組まれてるかを見てみた。&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;(in C:/Users/Kazuki/Documents/NetBeansProjects/empmng)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; employees GET&amp;nbsp;&amp;nbsp;&amp;nbsp; /employees&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {:controller=&amp;gt;"employees", :action=&amp;gt;"index"}&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; formatted_employees GET&amp;nbsp;&amp;nbsp;&amp;nbsp; /employees.:format&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {:controller=&amp;gt;"employees", :action=&amp;gt;"index"}&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; POST&amp;nbsp;&amp;nbsp; /employees&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {:controller=&amp;gt;"employees", :action=&amp;gt;"create"}&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; POST&amp;nbsp;&amp;nbsp; /employees.:format&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {:controller=&amp;gt;"employees", :action=&amp;gt;"create"}&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new_employee GET&amp;nbsp;&amp;nbsp;&amp;nbsp; /employees/new&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {:controller=&amp;gt;"employees", :action=&amp;gt;"new"}&lt;br&gt; formatted_new_employee GET&amp;nbsp;&amp;nbsp;&amp;nbsp; /employees/new.:format&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {:controller=&amp;gt;"employees", :action=&amp;gt;"new"}&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; edit_employee GET&amp;nbsp;&amp;nbsp;&amp;nbsp; /employees/:id/edit&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {:controller=&amp;gt;"employees", :action=&amp;gt;"edit"}&lt;br&gt;formatted_edit_employee GET&amp;nbsp;&amp;nbsp;&amp;nbsp; /employees/:id/edit.:format&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {:controller=&amp;gt;"employees", :action=&amp;gt;"edit"}&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; employee GET&amp;nbsp;&amp;nbsp;&amp;nbsp; /employees/:id&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {:controller=&amp;gt;"employees", :action=&amp;gt;"show"}&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; formatted_employee GET&amp;nbsp;&amp;nbsp;&amp;nbsp; /employees/:id.:format&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {:controller=&amp;gt;"employees", :action=&amp;gt;"show"}&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PUT&amp;nbsp;&amp;nbsp;&amp;nbsp; /employees/:id&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {:controller=&amp;gt;"employees", :action=&amp;gt;"update"}&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PUT&amp;nbsp;&amp;nbsp;&amp;nbsp; /employees/:id.:format&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {:controller=&amp;gt;"employees", :action=&amp;gt;"update"}&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DELETE /employees/:id&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {:controller=&amp;gt;"employees", :action=&amp;gt;"destroy"}&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DELETE /employees/:id.:format&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {:controller=&amp;gt;"employees", :action=&amp;gt;"destroy"}&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /:controller/:action/:id&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /:controller/:action/:id.:format &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;折り返されて見づらいけど、Railsのデフォのルーティングの設定である/:controller/:action/:idのほかにもいっぱい定義がされている。&lt;/p&gt; &lt;p&gt;ルーティングが定義されているroutes.rbを見てみると、見慣れない定義が…&lt;/p&gt; &lt;p&gt; &lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:3888f5ca-a13b-4881-afb2-7ccab50ba79e" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="ruby"&gt;  map.resources :employees
&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;どうやらこれをやると、自動的に色々なルーティングの設定が追加されるっぽい。&lt;br&gt;/employeesだけでindexメソッドが呼ばれて、/employees/1とかでid=1でshowメソッドが呼ばれ…&lt;br&gt;HTTPのGET PUT DELETE POSTをうまいこと使うようになってる。&lt;/p&gt;
&lt;p&gt;きっとこれが、Rails2.0でRESTスタイルに対応してやりやすくなったぜ！っていうものなんだろうか。&lt;br&gt;何にせよ、scaffoldで生成されるものが、1.*系と大きく変わったのは間違いないだろう。&lt;/p&gt;
&lt;p&gt;単純なCRUDの場合は、こっちのほうが都合よさそうな気がするしね。&lt;br&gt;仕事で使うわけじゃないから、地道に少しずつやっていこう。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/kazuki/aggbug/136398.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>kazuki@wankuma.com (かずき)</dc:creator><title>[NetBeans][Ruby]Scaffoldの吐くコードを読み続ける</title><link>http://blogs.wankuma.com/kazuki/archive/2008/05/04/136286.aspx</link><pubDate>Sun, 04 May 2008 22:44:00 GMT</pubDate><guid>http://blogs.wankuma.com/kazuki/archive/2008/05/04/136286.aspx</guid><wfw:comment>http://blogs.wankuma.com/kazuki/comments/136286.aspx</wfw:comment><comments>http://blogs.wankuma.com/kazuki/archive/2008/05/04/136286.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/kazuki/comments/commentRss/136286.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/kazuki/services/trackbacks/136286.aspx</trackback:ping><description>&lt;p&gt;いや、タイトルは、従業員管理システムというにはあまりにも貧相な結果になりそうなんでやめました。&lt;br&gt;さて、前回：&lt;a title="http://blogs.wankuma.com/kazuki/archive/2008/05/04/136273.aspx" href="http://blogs.wankuma.com/kazuki/archive/2008/05/04/136273.aspx"&gt;http://blogs.wankuma.com/kazuki/archive/2008/05/04/136273.aspx&lt;/a&gt;&lt;/p&gt; &lt;p&gt;引き続きscaffoldの吐き出すコードを見てみよう。&lt;br&gt;indexは見たので、お次はshow！&lt;/p&gt; &lt;p&gt; &lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:540a9da7-cbc2-4157-9e35-8cd917254fb3" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="ruby"&gt;  # GET /employees/1
  # GET /employees/1.xml
  def show
    @employee = Employee.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml =&amp;gt; @employee }
    end
  end
&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;これはindexと殆ど変わらない。&lt;br&gt;ただ、urlに数字を渡すことで、そのidを持った従業員を探し出すことになってる。&lt;/p&gt;
&lt;p&gt;んで、探し出したら後はviewに宜しく～～ってなってる。&lt;br&gt;好感持てるね。&lt;/p&gt;
&lt;p&gt;お次はnewだ！！&lt;/p&gt;
&lt;p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:1e7f81fa-fa98-4fe3-8783-e32f4a4c9f50" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="ruby"&gt;  # GET /employees/new
  # GET /employees/new.xml
  def new
    @employee = Employee.new

    respond_to do |format|
      format.html # new.html.erb
      format.xml  { render :xml =&amp;gt; @employee }
    end
  end
&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;これも非常にシンプルだ。&lt;br&gt;空の従業員を作って、viewによろしく！って丸投げ。これも問題ないね。&lt;/p&gt;
&lt;p&gt;んじゃぱぱっと次！edit！&lt;/p&gt;
&lt;p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:124f9ec3-4a76-450c-abca-df7647893be0" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="ruby"&gt;  # GET /employees/1/edit
  def edit
    @employee = Employee.find(params[:id])
  end
&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;これは、編集画面表示するだけなのでxml無しみたい。&lt;br&gt;引数のidで従業員を検索してるだけ。respond_toとか何もしてないので、employees/edit.html.rbが表示される。&lt;/p&gt;
&lt;p&gt;んじゃ次！createです。こいつは、今までと違う感じで、なんとifがある！！&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:525aeb1e-891b-482f-b798-952b5cb36a46" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="ruby"&gt;  # POST /employees
  # POST /employees.xml
  def create
    @employee = Employee.new(params[:employee])

    respond_to do |format|
      if @employee.save
        flash[:notice] = 'Employee was successfully created.'
        format.html { redirect_to(@employee) }
        format.xml  { render :xml =&amp;gt; @employee, :status =&amp;gt; :created, :location =&amp;gt; @employee }
      else
        format.html { render :action =&amp;gt; "new" }
        format.xml  { render :xml =&amp;gt; @employee.errors, :status =&amp;gt; :unprocessable_entity }
      end
    end
  end
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;パラメータから:employeesをとってきて、saveする。&lt;br&gt;保存に成功したら、redirect_to(@employee)を呼んでる。&lt;/p&gt;
&lt;p&gt;なんじゃこれ！ということで、調べに入る。&lt;br&gt;redirect_toだから、リダイレクトするのはわかるけど…。ぐぐるのもメンドイので動かしてみる。&lt;/p&gt;
&lt;p&gt;createアクションなので、従業員作成をしてみよう。&lt;br&gt;必要な情報を入力してCreateボタンをぽちっとな。&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2008/04/NetBeansRubyScaffold_121BE/image.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="225" alt="image" src="http://kazuki.wankuma.com/images/2008/04/NetBeansRubyScaffold_121BE/image_thumb.png" width="244" border="0"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;なんだろう…showメソッドあたりにリダイレクトしてるみたいだ。&lt;br&gt;ちょっと調べてみよう。&lt;/p&gt;
&lt;p&gt;…&lt;/p&gt;
&lt;p&gt;ん～手持ちのRails本では見つからない記述が結構ある。&lt;br&gt;どうも手持ちのはRails1.1ベースの本みたいだ。&lt;/p&gt;
&lt;p&gt;Web上の別の人の記事とかを見ると、1.1 → 1.2で変わった。1.2 → 2.0でも変わった。って書いてある。&lt;/p&gt;
&lt;p&gt;なんてこった。２世代も違う！！&lt;br&gt;失意の中ちょっと休憩。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/kazuki/aggbug/136286.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>kazuki@wankuma.com (かずき)</dc:creator><title>[NetBeans][Ruby]従業員管理システムみたいなものを作ってみよう　その３</title><link>http://blogs.wankuma.com/kazuki/archive/2008/05/04/136273.aspx</link><pubDate>Sun, 04 May 2008 15:23:00 GMT</pubDate><guid>http://blogs.wankuma.com/kazuki/archive/2008/05/04/136273.aspx</guid><wfw:comment>http://blogs.wankuma.com/kazuki/comments/136273.aspx</wfw:comment><comments>http://blogs.wankuma.com/kazuki/archive/2008/05/04/136273.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blogs.wankuma.com/kazuki/comments/commentRss/136273.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/kazuki/services/trackbacks/136273.aspx</trackback:ping><description>&lt;p&gt;前回：&lt;a title="http://blogs.wankuma.com/kazuki/archive/2008/05/04/136242.aspx" href="http://blogs.wankuma.com/kazuki/archive/2008/05/04/136242.aspx"&gt;http://blogs.wankuma.com/kazuki/archive/2008/05/04/136242.aspx&lt;/a&gt;&lt;/p&gt; &lt;p&gt;前回は、初回で自分でシコシコ書いたコードを捨ててscaffoldで生成されたコードにした。&lt;br&gt;今回は、ちょっぴりそれを眺めてみようと思う。&lt;/p&gt; &lt;p&gt;眺める対象のコードは、たぶん下の絵にあるコードだと思う。&lt;/p&gt; &lt;p&gt;&lt;a href="http://kazuki.wankuma.com/images/2008/04/NetBeansRuby_CA89/image.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="244" alt="image" src="http://kazuki.wankuma.com/images/2008/04/NetBeansRuby_CA89/image_thumb.png" width="194" border="0"&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;テストについてもとっかかりたいけど、とりあえず暫くはお預け。&lt;br&gt;とりあえず、どう動くのが正しいのかを把握しないと、こう動くのが正しい！というのを書くテストもうまいこと回らないだろうから。&lt;/p&gt; &lt;p&gt;さて、modelは第一回目で見たからcontrollerから見ていこう。&lt;br&gt;ちょっと長いけど、employees_controller.rbの中身を張ってみる。&lt;/p&gt; &lt;p&gt; &lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:25527ee5-0c83-4198-9ef3-c70fce157bd6" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="ruby"&gt;class EmployeesController &amp;lt; ApplicationController
  # GET /employees
  # GET /employees.xml
  def index
    @employees = Employee.find(:all)

    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml =&amp;gt; @employees }
    end
  end

  # GET /employees/1
  # GET /employees/1.xml
  def show
    @employee = Employee.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml =&amp;gt; @employee }
    end
  end

  # GET /employees/new
  # GET /employees/new.xml
  def new
    @employee = Employee.new

    respond_to do |format|
      format.html # new.html.erb
      format.xml  { render :xml =&amp;gt; @employee }
    end
  end

  # GET /employees/1/edit
  def edit
    @employee = Employee.find(params[:id])
  end

  # POST /employees
  # POST /employees.xml
  def create
    @employee = Employee.new(params[:employee])

    respond_to do |format|
      if @employee.save
        flash[:notice] = 'Employee was successfully created.'
        format.html { redirect_to(@employee) }
        format.xml  { render :xml =&amp;gt; @employee, :status =&amp;gt; :created, :location =&amp;gt; @employee }
      else
        format.html { render :action =&amp;gt; "new" }
        format.xml  { render :xml =&amp;gt; @employee.errors, :status =&amp;gt; :unprocessable_entity }
      end
    end
  end

  # PUT /employees/1
  # PUT /employees/1.xml
  def update
    @employee = Employee.find(params[:id])

    respond_to do |format|
      if @employee.update_attributes(params[:employee])
        flash[:notice] = 'Employee was successfully updated.'
        format.html { redirect_to(@employee) }
        format.xml  { head :ok }
      else
        format.html { render :action =&amp;gt; "edit" }
        format.xml  { render :xml =&amp;gt; @employee.errors, :status =&amp;gt; :unprocessable_entity }
      end
    end
  end

  # DELETE /employees/1
  # DELETE /employees/1.xml
  def destroy
    @employee = Employee.find(params[:id])
    @employee.destroy

    respond_to do |format|
      format.html { redirect_to(employees_url) }
      format.xml  { head :ok }
    end
  end
end
&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;scaffoldによって、それなりの量のコードが吐かれてる。&lt;br&gt;とりあえず、デフォルトで呼ばれるindexアクションから見てみようと思う。&lt;br&gt;上のコードからindexアクションの部分だけ抜粋！&lt;/p&gt;
&lt;p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:5e196284-a440-4740-825b-4f5166f4719c" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="ruby"&gt;  # GET /employees
  # GET /employees.xml
  def index
    @employees = Employee.find(:all)

    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml =&amp;gt; @employees }
    end
  end
&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;コメントを見る限り、無印とxmlをサポートしているみたいだ。&lt;br&gt;無印はhtmlっぽい。&lt;/p&gt;
&lt;p&gt;手持ちのRails本にはrespond_toが見当たらない。Rails2.0からの機能なのかな？&lt;br&gt;軽く調べたら、同じデータをもとに色んな形の出力をしやすくなってるみたいだ。&lt;/p&gt;
&lt;p&gt;format.htmlってやると、index.html.erbが呼ばれる。&lt;br&gt;format.拡張子 { ブロック }の形にすると、その拡張子が来た時に、ブロック内の処理が呼ばれるんじゃないかと感覚的に思う。&lt;/p&gt;
&lt;p&gt;試しにtext形式もサポートするように変えてみようかな…&lt;/p&gt;
&lt;p&gt;っとその前に！！この一覧を表示するアクションでは、無条件に従業員を全部取得して@employeesに入れてViewに宜しく！ってしてる。&lt;br&gt;うむ。正しいMVCのコードになってるね！！好感持てるよ。&lt;/p&gt;
&lt;p&gt;じゃぁどれくらい簡単にViewにテキスト形式を追加できるかやってみようと思う。&lt;br&gt;感覚的にはindexのrespond_toの所に下のようなコードを足すことになる。&lt;/p&gt;
&lt;p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:b8963f31-4274-4515-9dc4-1f5980b2fa47" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="ruby"&gt;      format.txt { render :inline =&amp;gt; "Hello world" }
&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;さくっと実行！&lt;a href="http://localhost:3000/employees.txtにアクセスしてみた。"&gt;http://localhost:3000/employees.txtにアクセスしてみた。&lt;/a&gt;&lt;br&gt;エラーorz&lt;/p&gt;
&lt;blockquote&gt;
&lt;h3&gt;NameError in EmployeesController#index &lt;/h3&gt;&lt;pre&gt;uninitialized constant Mime::TXT&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;respond_toのヘルプを読むとmime登録しなよ！的な事が英語で書いてあった。TOEIC300以下の読解力の持ち主が読解したからあってるかどうかは不明。&lt;br&gt;とりあえず、environment.rbの末尾に定義を追加してみた。&lt;/p&gt;
&lt;p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:ae0243eb-fdbc-4582-a334-c15ea521a040" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="ruby"&gt;Mime::Type.register_alias("text/plane", :txt)&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;一度WEBrickを落として再実行！&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2008/04/NetBeansRuby_CA89/image_3.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="122" alt="image" src="http://kazuki.wankuma.com/images/2008/04/NetBeansRuby_CA89/image_thumb_3.png" width="244" border="0"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;おっ出た出た。&lt;br&gt;そして、format.txtの後にブロック渡さなかったらindex.txt.erbの結果が出てくるみたいだ。&lt;br&gt;早速やってみた。&lt;br&gt;コントローラのformat.txtの後のブロックを消す。&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:4db753de-718f-408d-83a8-7312d5d8c4b3" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="ruby"&gt;  # GET /employees
  # GET /employees.xml
  def index
    @employees = Employee.find(:all)

    respond_to do |format|
      format.html # index.html.erb
      format.txt  # index.txt.erbを使っておくれ
      format.xml  { render :xml =&amp;gt; @employees }
    end
  end
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;んで、Viewsの下のemployeesにindex.txt.erbという名前でファイルを作った。中身は、従業員の名前だけを出す形にしてみた。&lt;/p&gt;
&lt;p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:605fd6b0-7c14-45f3-a976-ff48d49646e7" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="xml"&gt;&amp;lt;%- @employees.each do |employee| -%&amp;gt;
&amp;lt;%= employee.name %&amp;gt;
&amp;lt;%- end -%&amp;gt;
&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;実行！！&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2008/04/NetBeansRuby_CA89/image_4.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="117" alt="image" src="http://kazuki.wankuma.com/images/2008/04/NetBeansRuby_CA89/image_thumb_4.png" width="244" border="0"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;改行がブラウザでちゃんと表示されてないのはなぜだろう。&lt;br&gt;mime-typeあたりがちゃんと設定されてないのかな？？&lt;/p&gt;
&lt;p&gt;まぁ、後で実際に使うことになったらもうちょっと掘り下げるとして動作確認できたのでOK!&lt;/p&gt;
&lt;p&gt;次からは、ほかのアクションも見ていこう。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/kazuki/aggbug/136273.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>kazuki@wankuma.com (かずき)</dc:creator><title>[NetBeans][Ruby]従業員管理システムみたいなものを作ってみよう　その２</title><link>http://blogs.wankuma.com/kazuki/archive/2008/05/04/136242.aspx</link><pubDate>Sun, 04 May 2008 00:53:00 GMT</pubDate><guid>http://blogs.wankuma.com/kazuki/archive/2008/05/04/136242.aspx</guid><wfw:comment>http://blogs.wankuma.com/kazuki/comments/136242.aspx</wfw:comment><comments>http://blogs.wankuma.com/kazuki/archive/2008/05/04/136242.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blogs.wankuma.com/kazuki/comments/commentRss/136242.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/kazuki/services/trackbacks/136242.aspx</trackback:ping><description>&lt;p&gt;前回：&lt;a title="http://blogs.wankuma.com/kazuki/archive/2008/05/03/136233.aspx" href="http://blogs.wankuma.com/kazuki/archive/2008/05/03/136233.aspx"&gt;http://blogs.wankuma.com/kazuki/archive/2008/05/03/136233.aspx&lt;/a&gt;&lt;/p&gt; &lt;p&gt;なんとか、一覧っぽいのが表示されるようになった。&lt;br&gt;ここから追加、更新、削除処理を足して行けばいけてる感じになりそうだ。&lt;/p&gt; &lt;p&gt;しかし！！メンドクサイので、Railsのチュートリアルとかでは目玉？となるscaffoldを使ってさくっと作ってしまおう。&lt;br&gt;とりあえず、前回作ったcontrollerとviewをさくっと消す。&lt;/p&gt; &lt;p&gt;えぇ。Blogに書いてるから消すのに未練とかありません。&lt;/p&gt; &lt;p&gt;過去の未練をたちきったらジェネレータでscaffoldを選択。モデルをEmployeeにしてattribute pairsに--skip-migrationを指定してOK!&lt;/p&gt; &lt;p&gt;&lt;a href="http://kazuki.wankuma.com/images/2008/04/NetBeansRuby_317/image.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="125" alt="image" src="http://kazuki.wankuma.com/images/2008/04/NetBeansRuby_317/image_thumb.png" width="244" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Rails2.0系のscaffoldは、1.2の頃と違っていてmodelも一緒に作ってやるぜ！ってスタンスになったらしく、モデルが既にあると、migrationを生成するあたりでこけて最後までいかないみたいだ。&lt;br&gt;その対策として--skip-migrationを指定してあげる必要がある。&lt;/p&gt; &lt;p&gt;これを実行すると、Ruby on Railsで有名なscaffoldの雛形が出来上がってる。とりあえず、動きを見るために実行して、&lt;a href="http://localhost:3000/employeesにアクセス！"&gt;http://localhost:3000/employeesにアクセス！&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://kazuki.wankuma.com/images/2008/04/NetBeansRuby_317/image_3.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="149" alt="image" src="http://kazuki.wankuma.com/images/2008/04/NetBeansRuby_317/image_thumb_3.png" width="244" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;なんということでしょう。件数はあってるっぽいけど、列名はくっついてない。&lt;br&gt;ふむ。どうやら、モデルにどんな列があるか指定してあげないといけないようだ。（DBから読み取ってよきにはからってくれないんだ）&lt;/p&gt; &lt;p&gt;勉強になった。ということで、ControllerやViewを消して再挑戦。&lt;br&gt;今度はジェネレータで--skip-migrationの前に、列の定義も書いてあげる。&lt;/p&gt; &lt;p&gt;書き方は、列名:型といった形式みたいだ。&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2008/04/NetBeansRuby_317/image_4.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="84" alt="image" src="http://kazuki.wankuma.com/images/2008/04/NetBeansRuby_317/image_thumb_4.png" width="244" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;今回の従業員データでは、「emp_no:string name:string ent_date:date」を指定している。&lt;br&gt;ちゃんと列を指定して作ると、したのようにちゃんとデータが表示されるようになった。&lt;/p&gt; &lt;p&gt;一覧も出て&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2008/04/NetBeansRuby_317/image_5.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="147" alt="image" src="http://kazuki.wankuma.com/images/2008/04/NetBeansRuby_317/image_thumb_5.png" width="244" border="0"&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;編集もできて&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2008/04/NetBeansRuby_317/image_6.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="198" alt="image" src="http://kazuki.wankuma.com/images/2008/04/NetBeansRuby_317/image_thumb_6.png" width="244" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;新規登録もできて&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2008/04/NetBeansRuby_317/image_7.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="214" alt="image" src="http://kazuki.wankuma.com/images/2008/04/NetBeansRuby_317/image_thumb_7.png" width="244" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;もちろん削除もできる。（一覧でDestroyをクリックしたところ。確認ダイアログがでてOKを押すと消える）&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2008/04/NetBeansRuby_317/image_8.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="244" alt="image" src="http://kazuki.wankuma.com/images/2008/04/NetBeansRuby_317/image_thumb_8.png" width="218" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;わ～い。従業員管理システムの完成だ～。&lt;br&gt;因みに、Rails2.0系の正しいscaffoldの手順は下のようになるっぽい。&lt;/p&gt; &lt;ol&gt; &lt;li&gt;scaffoldで列名と型まできっちりと指定して作成&lt;/li&gt; &lt;li&gt;migrationファイルをいじくって制約とかがあれば追加する&lt;/li&gt; &lt;li&gt;マイグレーション&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;次からは、そうしよう。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/kazuki/aggbug/136242.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>kazuki@wankuma.com (かずき)</dc:creator><title>[NetBeans][Ruby]従業員管理システムのようなものを作ってみよう</title><link>http://blogs.wankuma.com/kazuki/archive/2008/05/03/136233.aspx</link><pubDate>Sat, 03 May 2008 19:13:00 GMT</pubDate><guid>http://blogs.wankuma.com/kazuki/archive/2008/05/03/136233.aspx</guid><wfw:comment>http://blogs.wankuma.com/kazuki/comments/136233.aspx</wfw:comment><comments>http://blogs.wankuma.com/kazuki/archive/2008/05/03/136233.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blogs.wankuma.com/kazuki/comments/commentRss/136233.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/kazuki/services/trackbacks/136233.aspx</trackback:ping><description>&lt;p&gt;先日なんとか動くところまでこぎつけたので、練習がてら超簡単なWebアプリを作ってみようと思う。&lt;br&gt;とりあえず、従業員を管理するシステムにしてみよう。&lt;/p&gt; &lt;p&gt;従業員は、従業員番号と従業員名と入社年月日を持ってるという軽いノリです。&lt;/p&gt; &lt;p&gt;早速NetBeansを起動！！Railsプロジェクトを作る前に、とりあえずデータベースだけ作成しておきます。&lt;br&gt;使用するデータベースは、NetBeansにくっついてくてるJavaDBを使うことにるす。とりあえず起動をかける。&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2008/04/NetBeansRuby_C92F/image.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="125" alt="image" src="http://kazuki.wankuma.com/images/2008/04/NetBeansRuby_C92F/image_thumb.png" width="244" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;起動すると、NetBeansの出力ウィンドウにメッセージが表示される。それを確認したら、DBの作成だ。&lt;br&gt;DBもJavaDBで右クリックしてCreate DatabaseでOK。&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2008/04/NetBeansRuby_C92F/image_3.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="104" alt="image" src="http://kazuki.wankuma.com/images/2008/04/NetBeansRuby_C92F/image_thumb_3.png" width="244" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;empmng_developmentとempmng_testという２つのデータベースを作成する。&lt;br&gt;DBを作成すると、作成したDBに対する接続の設定も追加される。&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2008/04/NetBeansRuby_C92F/image_4.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="51" alt="image" src="http://kazuki.wankuma.com/images/2008/04/NetBeansRuby_C92F/image_thumb_4.png" width="244" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;ここに接続をあらかじめ登録しておくと、Railsのプロジェクトを作るときに楽になる。&lt;br&gt;ということで、Railsのプロジェクトを作成する。新規プロジェクトからRuby on Rails Applicationを選択する。&lt;/p&gt; &lt;p&gt;プロジェクト名をempmngにして、次へ。&lt;br&gt;データベースを、どれにするか聞かれるので、さっき作っておいたDBを選択する。&lt;br&gt;ついでに、下のほうにあるJDBCを使用するという部分にチェックを入れておくのも忘れない。&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2008/04/NetBeansRuby_C92F/image_5.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="168" alt="image" src="http://kazuki.wankuma.com/images/2008/04/NetBeansRuby_C92F/image_thumb_5.png" width="244" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Finish！をクリックするとRuby on Railsのプロジェクトがもっさりと作られる。&lt;br&gt;まぁNetBeans5.5までのもっさり感に堪えてきてる人にとっては超高速に感じるくらいになってる。&lt;/p&gt; &lt;p&gt;いっぱいファイルとか作ってるからこんなもんなんだろう。&lt;br&gt;下が作られたプロジェクトと、DBへの接続情報のかかれたdatabase.yaml&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2008/04/NetBeansRuby_C92F/image_6.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="244" alt="image" src="http://kazuki.wankuma.com/images/2008/04/NetBeansRuby_C92F/image_thumb_6.png" width="227" border="0"&gt;&lt;/a&gt; &lt;a href="http://kazuki.wankuma.com/images/2008/04/NetBeansRuby_C92F/image_7.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="173" alt="image" src="http://kazuki.wankuma.com/images/2008/04/NetBeansRuby_C92F/image_thumb_7.png" width="244" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;いい感じ。&lt;br&gt;ここからやっとプログラムつくりに入る。&lt;/p&gt; &lt;p&gt;まずは、アプリケーションの土台となるモデル。モデルが無いことには個人的には始めにくい。&lt;br&gt;プロジェクト名あたりで右クリックして、Generateを選択する。&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2008/04/NetBeansRuby_C92F/image_8.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="71" alt="image" src="http://kazuki.wankuma.com/images/2008/04/NetBeansRuby_C92F/image_thumb_8.png" width="244" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;モデルのジェネレータを選択して、引数にEmployeeを入力する。&lt;br&gt;ここに入力したものの複数形がデータベースのテーブル名になるという仕様だ。&lt;/p&gt; &lt;p&gt;&lt;a href="http://kazuki.wankuma.com/images/2008/04/NetBeansRuby_C92F/image_9.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="120" alt="image" src="http://kazuki.wankuma.com/images/2008/04/NetBeansRuby_C92F/image_thumb_9.png" width="244" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;これも完了を押すと、Outputウィンドウにつらつらと生成されたものが表示される。&lt;br&gt;これで、モデルが出来上がり。&lt;/p&gt; &lt;p&gt;最初のほうで決めたけど、この従業員は、従業員番号と従業員名と入社年月日を持っているということだった。&lt;br&gt;なので、これを作りにかかる。&lt;/p&gt; &lt;p&gt;&lt;br&gt;Database Migrationsのmigrateの下に001_create_employees.rbというファイルができている。&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2008/04/NetBeansRuby_C92F/image_10.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="179" alt="image" src="http://kazuki.wankuma.com/images/2008/04/NetBeansRuby_C92F/image_thumb_10.png" width="237" border="0"&gt;&lt;/a&gt;&amp;nbsp;&lt;br&gt;ここに、テーブルが持ってるカラムの定義を足す。&lt;br&gt;さっきのGenerateで、したのような感じのファイルが出来上がってると思う。&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:baf10931-3205-4532-9ec2-aea55559fdf8" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="ruby"&gt;class CreateEmployees &amp;lt; ActiveRecord::Migration
  def self.up
    create_table :employees do |t|

      t.timestamps
    end
  end

  def self.down
    drop_table :employees
  end
end
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;ここのself.upメソッドにカラムの定義を追加する。&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:fe9b1722-040b-4255-bbd7-7f9cff68d30a" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="ruby"&gt;class CreateEmployees &amp;lt; ActiveRecord::Migration
  def self.up
    create_table :employees do |t|
      # 従業員番号！nullはだめよ
      t.column :emp_no, :string, :null =&amp;gt; false
      # 従業員名！nullはだめよ
      t.column :name, :string, :null =&amp;gt; false
      # 入社年月日！nullはだめよ
      t.column :ent_date, :date, :null =&amp;gt; false
      t.timestamps
    end
  end

  def self.down
    drop_table :employees
  end
end
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;これで、モデルのカラムとかの指定ができたので、DBにテーブルを作りにかかる。&lt;br&gt;テーブルを作るのは、さっき書いた001_create_employees.rbの定義に従ってさくっとやってくれる。&lt;/p&gt;
&lt;p&gt;プロジェクト名あたりで右クリックして、Migrate DatabaseのTo Current Versionを選ぶとデータベースにテーブルを作ってくれる。&lt;br&gt;楽チン。&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2008/04/NetBeansRuby_C92F/image_11.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="106" alt="image" src="http://kazuki.wankuma.com/images/2008/04/NetBeansRuby_C92F/image_thumb_11.png" width="244" border="0"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Outputウィンドウには、下のように表示される。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;(in C:/Users/Kazuki/Documents/NetBeansProjects/empmng)&lt;br&gt;== 1 CreateEmployees: migrating ===============================================&lt;br&gt;-- create_table(:employees)&lt;br&gt;&amp;nbsp;&amp;nbsp; -&amp;gt; 0.2434s&lt;br&gt;&amp;nbsp;&amp;nbsp; -&amp;gt; 0 rows&lt;br&gt;== 1 CreateEmployees: migrated (0.2439s) ====================================== &lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;ちなみに、これは開発用のデータベースempmng_developmentに作成されている。&lt;br&gt;本当に作成されてるのか見てみると… 
&lt;p&gt;&lt;a href="http://kazuki.wankuma.com/images/2008/04/NetBeansRuby_C92F/image_12.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="189" alt="image" src="http://kazuki.wankuma.com/images/2008/04/NetBeansRuby_C92F/image_thumb_12.png" width="244" border="0"&gt;&lt;/a&gt; 
&lt;p&gt;ばっちりできてる。&lt;br&gt;ここらへんで、簡単に動きをみてみようと思う。&lt;br&gt;プロジェクト名で右クリックしてRails Consoleを選択すると、jirbが立ち上がる。&lt;br&gt;ここにぱちぱちと打ち込んでいく。&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:73f9d6f6-d354-47fa-8b91-78710d5843d9" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="ruby"&gt;?&amp;gt; emp = Employee.new :emp_no =&amp;gt; 'A001', :name =&amp;gt; 'Tanaka Taro', :ent_date =&amp;gt; Date.today
=&amp;gt; #&amp;lt;Employee id: nil, emp_no: "A001", name: "Tanaka Taro", ent_date: "2008-05-03", created_at: nil, updated_at: nil&amp;gt;
&amp;gt;&amp;gt; emp.save
=&amp;gt; true&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;これでデータの登録完了！引き続き、ちゃんと登録できたか見てみる。&lt;br&gt;これは、findメソッドでできる。&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:3fe58087-6352-4ddb-a493-650fe50498e6" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="ruby"&gt;&amp;gt;&amp;gt; Employee.find :all
=&amp;gt; [#&amp;lt;Employee id: 6, emp_no: "A001", name: "Tanaka Taro", ent_date: "2008-05-03", created_at: "2008-05-03 14:49:57", updated_at: "2008-05-03 14:49:57"&amp;gt;]
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;これもOKだ。続いて、Tanaka TaroをTanaka Ichiroに変えてみる。&lt;br&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:39c9f7bd-b53d-419c-9d26-442a903d830c" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="sql"&gt;&amp;gt;&amp;gt; emp = Employee.find 6
=&amp;gt; #&amp;lt;Employee id: 6, emp_no: "A001", name: "Tanaka Taro", ent_date: "2008-05-03", created_at: "2008-05-03 14:49:57", updated_at: "2008-05-03 14:49:57"&amp;gt;
&amp;gt;&amp;gt; emp.name = "Tanaka Ichiro"
=&amp;gt; "Tanaka Ichiro"
&amp;gt;&amp;gt; emp.save
=&amp;gt; true
&amp;gt;&amp;gt; Employee.find :all
=&amp;gt; [#&amp;lt;Employee id: 6, emp_no: "A001", name: "Tanaka Ichiro", ent_date: "2008-05-03", created_at: "2008-05-03 14:49:57", updated_at: "2008-05-03 14:53:09"&amp;gt;]
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;ちゃんとDBへの読み書きができてる。素敵だ。&lt;/p&gt;
&lt;p&gt;続いて、コントローラを作ろうと思う。コントローラの名前もモデルにあわせてEmployeesで作る。&lt;br&gt;Generateでcontrollerを選択して、Employeesと入力してOKを押す。&lt;br&gt;そうすると、したのようにコントローラの雛形が出来上がってる。&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:03d96ab3-5044-4c2d-a9ca-0a94907d55e4" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="ruby"&gt;class EmployeesController &amp;lt; ApplicationController
end
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;ここにコードを書いていく。&lt;br&gt;とりあえず、indexというメソッドを定義して、それを動かしてみよう。&lt;/p&gt;
&lt;p&gt;コントローラでは、renderメソッドで、レスポンスに何を返すか色々指定できるっぽい。&lt;br&gt;とりあえず、お約束的なHello worldみたいなのを書いてみた。&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:3f4112b5-b8af-4ae0-8ab4-68a6a0cc38ce" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="ruby"&gt;class EmployeesController &amp;lt; ApplicationController
  def index
    render :inline =&amp;gt; "Hello Rails Application"
  end
end
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;さて、ついにWebアプリケーション！！F6を押してWEBrickを起動する。&lt;br&gt;ブラウザのアドレスに、&lt;a href="http://localhost:3000/employeesと入力してみると下のように、ブラウザに文字がちゃんと表示された。 "&gt;http://localhost:3000/employeesと入力してみると下のように、ブラウザに文字がちゃんと表示された。&lt;br&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="146" alt="image" src="http://kazuki.wankuma.com/images/2008/04/NetBeansRuby_C92F/image_thumb_13.png" width="244" border="0"&gt; &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;よきことかな。&lt;br&gt;調子にのって、Employeesテーブルの中身を表示してみた。&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:3bd0c658-0cc5-47b7-a9d1-b0ff270ca81f" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="ruby"&gt;class EmployeesController &amp;lt; ApplicationController
  def index
    # 全員取得
    employees = Employee.find :all
    # 名前のリストを取得
    name_list = employees.collect(&amp;amp;:name).join
    # 名前を画面に出してみる
    render :inline =&amp;gt; "Hello #{name_list}"
  end
end
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;まだTanaka Ichiroさんしか入ってないので、それが表示されるだけだけど、ちゃんと動いてる。&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2008/04/NetBeansRuby_C92F/image_13.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="137" alt="image" src="http://kazuki.wankuma.com/images/2008/04/NetBeansRuby_C92F/image_thumb_14.png" width="244" border="0"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;お次はViewを作ろう。今のままだと、Controllerで見た目まで作ってる。本来Ruby on RailsではViewがこれを担当する。&lt;br&gt;よく見てみると、ControllerのジェネレータにViewsという入力欄があった。&lt;br&gt;もう一度コントローラのジェネレータを立ち上げて、NameにEmployees、Viewsにindexと指定してOKを押す。&lt;/p&gt;
&lt;p&gt;&lt;a href="http://kazuki.wankuma.com/images/2008/04/NetBeansRuby_C92F/image_14.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="165" alt="image" src="http://kazuki.wankuma.com/images/2008/04/NetBeansRuby_C92F/image_thumb_15.png" width="244" border="0"&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;ジェネレータは、結構かしこいので、すでにあるものは手をつけずに、新たに作る必要のあるものだけ作ってくれるみたいだ。&lt;br&gt;今回は、下に表示させてる４つのファイルを生成してくれた。（ほかにもあるけど、今は使わない）&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2008/04/NetBeansRuby_C92F/image_15.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="225" alt="image" src="http://kazuki.wankuma.com/images/2008/04/NetBeansRuby_C92F/image_thumb_16.png" width="234" border="0"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Viewができたので、コントローラからrenderメソッドを消す。&lt;br&gt;Railsは、デフォルトだとコントローラとアクションの名前から自動的にViewを対応付けてくれる。&lt;/p&gt;
&lt;p&gt;今回の例だとemployees_controllerのindexアクションなのでViewsの下にあるemployees/index.html.erbが対象になるっていう寸法だ。&lt;br&gt;ためしにコントローラのrenderメソッドをコメントアウトして実行すると、employees/index.html.erbの中身が出ることが確認できる。&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:0a39f19f-1bd0-42e0-87fb-a5464c374c99" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="ruby"&gt;class EmployeesController &amp;lt; ApplicationController
  def index
    # 全員取得
    employees = Employee.find :all
    # 名前のリストを取得
    name_list = employees.collect(&amp;amp;:name).join
    # 名前を画面に出してみる
    # render :inline =&amp;gt; "Hello #{name_list}" コメントアウト!!
  end
end
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://kazuki.wankuma.com/images/2008/04/NetBeansRuby_C92F/image_16.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="159" alt="image" src="http://kazuki.wankuma.com/images/2008/04/NetBeansRuby_C92F/image_thumb_17.png" width="244" border="0"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;後は、コントローラからビューへのデータの受け渡し方さえわかれば、画面にデータを表示できそうな気がしてくる。&lt;br&gt;みてみると、コントローラのフィールド(@つきの変数ね）は、自動でView側から使えるという手はずになってるという。&lt;/p&gt;
&lt;p&gt;ちょっと試しにやってみた。&lt;br&gt;コントローラの@nameに田中　太郎を代入して…&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:53e1d909-1480-427f-9ade-cc3a83866b9d" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="ruby"&gt;class EmployeesController &amp;lt; ApplicationController
  def index
    # とりあえず
    @name = "田中　太郎"
  end
end
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Viewでそれを使ってみる。&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:d4669195-d745-4af7-95de-4c55f4d52509" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="ruby"&gt;&amp;lt;h1&amp;gt;Employees#index&amp;lt;/h1&amp;gt;
&amp;lt;p&amp;gt;Find me in app/views/employees/index.html.erb&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;%= @name %&amp;gt; &amp;lt;/p&amp;gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;これで実行すると、ちゃんと田中　太郎が出てる！！&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2008/04/NetBeansRuby_C92F/image_17.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="244" alt="image" src="http://kazuki.wankuma.com/images/2008/04/NetBeansRuby_C92F/image_thumb_18.png" width="174" border="0"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;ということで、簡単に表形式で従業員一覧を出してみた。&lt;br&gt;コントローラでは、全従業員のデータを取得して@employeesという変数につっこんでるだけ。&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:1645b3ea-233f-40c6-a2f7-5422a12914c1" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="ruby"&gt;class EmployeesController &amp;lt; ApplicationController
  def index
    # 全員を従業員番号でソートして取得
    @employees = Employee.find(:all, :order =&amp;gt; "emp_no asc")
  end
end
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Viewでは、それを使って表を組み立ててる。&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:2e43bd0c-f177-493b-8962-d8b8cbafdd51" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="ruby"&gt;&amp;lt;h1&amp;gt;従業員一覧&amp;lt;/h1&amp;gt;
&amp;lt;table border="1"&amp;gt;
  &amp;lt;tr&amp;gt;
    &amp;lt;th&amp;gt;従業員番号&amp;lt;/th&amp;gt;
    &amp;lt;th&amp;gt;従業員名&amp;lt;/th&amp;gt;
    &amp;lt;th&amp;gt;入社年月日&amp;lt;/th&amp;gt;
  &amp;lt;/tr&amp;gt;
&amp;lt;% @employees.each do |employee| %&amp;gt;
  &amp;lt;tr&amp;gt;
    &amp;lt;td&amp;gt;&amp;lt;%= employee.emp_no %&amp;gt; &amp;lt;/td&amp;gt;
    &amp;lt;td&amp;gt;&amp;lt;%= employee.name %&amp;gt; &amp;lt;/td&amp;gt;
    &amp;lt;td&amp;gt;&amp;lt;%= employee.ent_date %&amp;gt; &amp;lt;/td&amp;gt;
  &amp;lt;/tr&amp;gt;
&amp;lt;% end %&amp;gt;
&amp;lt;/table&amp;gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;これを実行すると、下のように表示される。&lt;br&gt;タイトルが若干削れてるけど、それ以外はうまいこといってる。タイトルが削れてるのは、たぶんデフォルトであたってるスタイルシートが何かしてるせいだと思うので、とりあえずスルーしておく。&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2008/04/NetBeansRuby_C92F/image_18.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="168" alt="image" src="http://kazuki.wankuma.com/images/2008/04/NetBeansRuby_C92F/image_thumb_19.png" width="244" border="0"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;ついでなので、DBに何件かデータをつっこんでから再表示させてみた。&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2008/04/NetBeansRuby_C92F/image_19.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="231" alt="image" src="http://kazuki.wankuma.com/images/2008/04/NetBeansRuby_C92F/image_thumb_20.png" width="244" border="0"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;うん。いい感じだ。&lt;br&gt;長くなったので、今回はここまで。次回は、テストの仕方とかについてみてみようかな。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/kazuki/aggbug/136233.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>kazuki@wankuma.com (かずき)</dc:creator><title>[NetBeans][JRuby]JRuby on Rails やっとレールに乗れそう</title><link>http://blogs.wankuma.com/kazuki/archive/2008/05/02/136096.aspx</link><pubDate>Fri, 02 May 2008 00:32:00 GMT</pubDate><guid>http://blogs.wankuma.com/kazuki/archive/2008/05/02/136096.aspx</guid><wfw:comment>http://blogs.wankuma.com/kazuki/comments/136096.aspx</wfw:comment><comments>http://blogs.wankuma.com/kazuki/archive/2008/05/02/136096.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/kazuki/comments/commentRss/136096.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/kazuki/services/trackbacks/136096.aspx</trackback:ping><description>&lt;p&gt;ここ数日できないだのなんだの騒いでたのは、jruby-opensslの0.2.2が原因っぽいかんじでした。&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;gem uninstall jruby-openlls&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;をするとうまいこと動くようになった。&lt;br&gt;いろんなタイミングで、jruby-openssl入れろといわれるようになるけど…&lt;/p&gt; &lt;p&gt;というわけで、１つ前のバージョンをいれてみた。&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;gem install jruby-openssl --version "=0.2.1"&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;とりあえず、これで警告も例外も出ずに動いてるっぽい。modelの作成が普通にできることを確認した&lt;/p&gt; &lt;p&gt;あしたからがんばろう&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/kazuki/aggbug/136096.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>kazuki@wankuma.com (かずき)</dc:creator><title>[C#][Java][Ruby][デザインパターン]Observerパターンの実装例</title><link>http://blogs.wankuma.com/kazuki/archive/2008/04/25/135347.aspx</link><pubDate>Fri, 25 Apr 2008 23:31:00 GMT</pubDate><guid>http://blogs.wankuma.com/kazuki/archive/2008/04/25/135347.aspx</guid><wfw:comment>http://blogs.wankuma.com/kazuki/comments/135347.aspx</wfw:comment><comments>http://blogs.wankuma.com/kazuki/archive/2008/04/25/135347.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/kazuki/comments/commentRss/135347.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/kazuki/services/trackbacks/135347.aspx</trackback:ping><description>&lt;p&gt;@ITの掲示板で、&lt;a href="http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=44559&amp;amp;forum=7&amp;amp;6"&gt;こんな記事&lt;/a&gt;を見かけたのでちょびっと書いてみる。&lt;/p&gt; &lt;p&gt;デザインパターンの中でも、割と有名（だと思ってる）Observerパターンについて。&lt;br&gt;まずは、Javaから。&lt;/p&gt; &lt;p&gt;Javaには標準で、java.util.Observableクラスとjava.util.Observerインターフェースがある。&lt;br&gt;これを使うのが手っ取り早い。&lt;/p&gt; &lt;p&gt;今回の例題は、Personクラスがあって、Nameプロパティを変更すると、「Person Name ～」と表示するようなものです。&lt;br&gt;んじゃ早速Personクラスから。&lt;/p&gt; &lt;p&gt; &lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:184d5f63-53aa-4cb0-86db-defc705bc6d1" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="java"&gt;package com.wankuma.kazuki.observerpattern;

import java.util.Observable;

// Observableを継承する。
public class Person extends Observable {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        if (this.name == name) {
            return;
        }
        this.name = name;
        // 変更があったというフラグを立てて、Observerに変更を通知する。
        setChanged();
        notifyObservers();
    }
    
}
&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;setNameで変更があったことをsetChangedとnotifyObserversでObserverに対して通知してます。&lt;br&gt;Javaではご法度のStringの==による比較をやってるけど、値が違う場合にはnotifyObserversしないというの実現するってのをequalsメソッドつかってやるとnullとかも考えなきゃなのでメンドクサイ。&lt;br&gt;なので、==を使ってお茶を濁してる。&lt;/p&gt;
&lt;p&gt;&lt;br&gt;Observer側のPersonPrinterのコードもさくっと実装。&lt;/p&gt;
&lt;p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:0a5cf236-c27e-4516-b93c-cfdab072143b" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="java"&gt;package com.wankuma.kazuki.observerpattern;

import java.util.Observable;
import java.util.Observer;

public class PersonPrinter implements Observer {

    public void update(Observable o, Object arg) {
        Person p = (Person) o;
        System.out.println("Person Name:" + p.getName());
    }

}
&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;System.out.printlnで表示してるだけになる。&lt;br&gt;んじゃ、この２つのクラスを組み合わせて使うMainクラスを見てみよう。&lt;/p&gt;
&lt;p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:46076c17-d9ab-4e1b-a081-b36217888d55" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="java"&gt;package com.wankuma.kazuki.observerpattern;

public class Main {

    public static void main(String[] args) {
        // PersonとPrinterを組み立てる
        Person p = new Person();
        PersonPrinter pp = new PersonPrinter();
        p.addObserver(pp);
        
        p.setName("田中　太郎");
        p.setName("田中　一郎");
    }

}
&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;実行すると&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;田中　太郎&lt;/p&gt;
&lt;p&gt;田中　一郎&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;と表示される。&lt;br&gt;ちゃんと、監視できてるね。&lt;/p&gt;
&lt;p&gt;Rubyにも同じようなクラスが標準であるので同じような感じのコードでいける。&lt;/p&gt;
&lt;p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:10acbc5c-b2b8-4f29-950e-8eee14f41a68" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="ruby"&gt;require 'observer'

class Person
  include Observable
  
  attr_accessor :name
  
  def name=(name)
    return if @name == name
    @name = name
    
    changed
    notify_observers(self)
  end
end

class PersonPrinter
  def update(obj)
    puts "Person Name:" + obj.name
  end
end

p = Person.new
pp = PersonPrinter.new

p.add_observer(pp)
p.name = "田中　太郎"
p.name = "田中　一郎"&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;changedで変更フラグを立ててnotify_observersで通知をする。全く同じ。&lt;/p&gt;
&lt;p&gt;さて、お次はC#！&lt;br&gt;こいつだけは、標準でObserverクラスとかを持ってない。&lt;br&gt;そのかわり、DelegateやEventという仕組みを言語として持ってたりする。その仕組みを使うとこんな感じかな。&lt;/p&gt;
&lt;p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:fcfc3af5-0c05-45fe-9c21-64ed3891966e" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="c#"&gt;using System;

namespace Com.Wankuma.Kazuki.ObserverPattern
{
    public class Person
    {
        // 変更通知イベント
        public event EventHandler NameChanged;

        // 変更通知をするメソッド
        protected void OnNameChanged()
        {
            if (NameChanged != null)
            {
                NameChanged(this, EventArgs.Empty);
            }
        }

        private string _name;
        public string Name
        {
            get { return _name; }
            set
            {
                if (_name == value)
                {
                    return;
                }
                _name = value;
                OnNameChanged();
            }
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            var p = new Person();
            // 表示するだけだから、いちいちクラスこさえなくてもいいや
            p.NameChanged += (sender, e) =&amp;gt; Console.WriteLine("Person Name: " + p.Name);

            p.Name = "田中　太郎";
            p.Name = "田中　一郎";
        }
    }
}
&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;三者三様だね。（似てるけど）&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/kazuki/aggbug/135347.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>kazuki@wankuma.com (かずき)</dc:creator><title>[Ruby][Java][C#]丸投げ委譲</title><link>http://blogs.wankuma.com/kazuki/archive/2008/03/23/129171.aspx</link><pubDate>Sun, 23 Mar 2008 00:01:00 GMT</pubDate><guid>http://blogs.wankuma.com/kazuki/archive/2008/03/23/129171.aspx</guid><wfw:comment>http://blogs.wankuma.com/kazuki/comments/129171.aspx</wfw:comment><comments>http://blogs.wankuma.com/kazuki/archive/2008/03/23/129171.aspx#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://blogs.wankuma.com/kazuki/comments/commentRss/129171.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/kazuki/services/trackbacks/129171.aspx</trackback:ping><description>&lt;p&gt;モトネタ：&lt;a href="http://blogs.wankuma.com/nagise/archive/2008/03/21/129008.aspx"&gt;実装を委譲できる言語を作ればいいのかもしれない&lt;/a&gt;&lt;/p&gt; &lt;h1&gt;Java&lt;/h1&gt; &lt;p&gt;委譲できる言語ということで、Javaだとこんなにメンドクサイ！！という例が出てる。&lt;br&gt;具体的に手順としてはどうなるか？ということをやってみようと思う。&lt;/p&gt; &lt;p&gt;まず、委譲先になるクラスHogeを定義します。&lt;br&gt;com.wankuma.kazuki.deleg.Hogeという名前で作ります！！&lt;br&gt;メソッドは２つ。fooとbooです。&lt;/p&gt; &lt;p&gt; &lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:7a7cbe5f-2d90-4da9-89af-9d25eaef9127" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="java"&gt;package com.wankuma.kazuki.deleg;

public class Hoge {
	public void foo() {
		System.out.println("Hoge#foo");
	}
	public void boo() {
		System.out.println("Hoge#boo");
	}
}
&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;これをフィールドに持って、仕事をHogeに丸投げするPiyoさんを作ります。&lt;/p&gt;
&lt;p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:b88a1e45-401a-4f94-86ae-0dff239cebb3" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="java"&gt;package com.wankuma.kazuki.deleg;

public class Piyo {
	private Hoge hoge = new Hoge();
}
&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;委譲先のクラスのインスタンスをフィールドに持ったらおもむろにAlt + Shift + Sを押します。そして、出てきたメニューのGenerate Delegate Methods...を選択します。&lt;br&gt;&lt;a href="http://kazuki.wankuma.com/images/2008/RubyJavaC_A/image.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="477" alt="image" src="http://kazuki.wankuma.com/images/2008/RubyJavaC_A/image_thumb.png" width="708" border="0"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;出てきたダイアログで委譲させたいメソッドを選択する。満足いくまで選択したらOKをくりっく！&lt;/p&gt;
&lt;p&gt;&lt;a href="http://kazuki.wankuma.com/images/2008/RubyJavaC_A/image_3.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="458" alt="image" src="http://kazuki.wankuma.com/images/2008/RubyJavaC_A/image_thumb_3.png" width="521" border="0"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;委譲するメソッドがばっちり記入されてます。さすがEclipse!!!&lt;/p&gt;
&lt;p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:08fc3021-cb4f-4b8b-9538-de6f3a8a1a14" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="java"&gt;package com.wankuma.kazuki.deleg;

public class Piyo {
	private Hoge hoge = new Hoge();

	public void boo() {
		hoge.boo();
	}

	public void foo() {
		hoge.foo();
	}
}
&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;C#&lt;/h1&gt;
&lt;p&gt;お次はC#！こちらは…ノリノリでHogeとPiyoを書いてみたが…&lt;/p&gt;
&lt;p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:1081d363-fb1d-4a68-972c-3b3a27f35297" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="c#"&gt;using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Com.Wankuma.Kazuki.Deleg
{
    class Program
    {
        static void Main(string[] args)
        {
        }
    }

    class Hoge
    {
        public void Foo()
        {
            Console.WriteLine("Hoge#Foo");
        }
        public void Boo()
        {
            Console.WriteLine("Hoge#Boo");
        }
    }

    class Piyo
    {
        private Hoge hoge = new Hoge();

    }
}
&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;リファクタリングメニューを眺めても委譲っぽいのが無い！？ということで泣く泣く全部手書き実装…。するのは悔しい。&lt;br&gt;ということで書かなかった！！何か楽に書く方法は無いのだろうか。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;Ruby&lt;/h1&gt;
&lt;p&gt;次はRuby。Rubyには標準で委譲をするためのライブラリがついてきているという噂。&lt;br&gt;とりあえずは、委譲のコードを書く直前の段階までサクっと書く。&lt;/p&gt;
&lt;p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:f2928f06-8d2a-4534-bc03-1ef26c9c5beb" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="ruby"&gt;class Hoge
  def foo
    puts "Hoge#foo"
  end
  
  def boo
    puts "Hoge#boo"
  end
end

class Piyo
  def initialize
    @hoge = Hoge.new
  end
end&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;委譲を実現するためのライブラリとして、Forwardableというのが使えるらしい。&lt;br&gt;使い方はrequire 'forwardable'をしてクラスでextend Forwardableをして、def_delegatorsメソッドを呼ぶという流れになるみたい。&lt;br&gt;早速してみた。&lt;/p&gt;
&lt;p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:5026acf6-67f5-4c5d-bea7-53acb80c6cbf" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="ruby"&gt;require 'forwardable'

class Hoge
  def foo
    puts "Hoge#foo"
  end
  
  def boo
    puts "Hoge#boo"
  end
end

class Piyo
  extend Forwardable
  def initialize
    @hoge = Hoge.new
  end
  
  def_delegators(:@hoge, :foo, :boo) # fooとbooを@hogeに委譲
end

piyo = Piyo.new
piyo.foo # =&amp;gt; Hoge#foo
piyo.boo # =&amp;gt; Hoge#boo
&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;全部のコードを書くより楽チンだわぁ。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/kazuki/aggbug/129171.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>