Servlet Garden

Java, Web Application and beyond

Flower

Four Days on Rails by NetBeans – Day 2

Day 1に引き続き、Four Days on Rails(http://rails.homelinux.org/)のDay 2をNetBeansのRuby Packを使って試してみました。

  1. Scaffold Codeを自動生成させる
    • Projectsウィンドウへ移動 -> ToDoプロジェクトで右クリック -> Generate…を選択 -> Generate: scaffoldを選択 -> ArgumentsにCategoryと入力 -> OK
    • Ruby on Rails Generating Category Scaffold on NetBeans
    • 以上の操作で次のようにコードが自動生成れます。
    • Ruby on Rails Messages of Generating Category Scaffold on NetBeans
    • Projectsウィンドウ -> ToDoプロジェクト -> Controllers -> categories_controller.rbを開くと自動生成されたコードがこのように表示されます。
    • Ruby on Rails Generated Categories_Controller.rb on NetBeans
    • オリジナルのFour Days on Railsよりもここで使っているRailsなどのバージョンのほうが新しいので、自動生成されたファイルの中身がところどころ違います。
    • ※ ToDoプロジェクトのView, categories以下に生成されたnew.rhtml, edit.rhtmlはNetBeansではSyntaxエラーになってしまう行がありますが、実際にはSyntaxエラーではなく、正しく動作します。rakeのバージョンが0.7.2だったときにはまったく同じコードでもエラーにならなかったのですが、0.7.3にバージョンアップされてからエラーが報告されるようになりました。
    • Ruby on Rails Incorrect Syntax Erro on NetBeans
  2. 自動生成されたScaffold CodeのControllerを修正する
    • ・Categoryをアルファベット順に表示する
    • Projectsウィンドウ->ToDoプロジェクト->Controllers-> categories_controller.rbを開いて、次のように修正します。
    • def list
        @category_pages, @categories = paginate :categories,
          :per_page => 10, :o rder_by => 'category'
      end
    • Ruby on Rails Tailoring Controller for Sorting on NetBeans
    • 不要なshowページを無くして、listページを表示する
    • 同じ、categories_controller.rbで次のように修正します。
    • def update
          @category = Category.find(params[:id])
          if @category.update_attributes(params[:category])
              flash[:notice] = 'Category was successfully updated.'
              redirect_to :action => 'list', :id => @category
          else
              render :action => 'edit'
          end
      end
    • Ruby on Rails Tailoring Controller for Navigating on NetBeans
    • http://localhost:3000/categoriesをリクエストして新しいカテゴリを追加すると、2つの修正が反映されていることがわかります。WEBrickを再起動したい場合は左側のXボタンをクリックしてサーバを停止させて、Run Main Projectボタンをクリックします。
    • Ruby on Rails WEBrick Stop Button on NetBeans
    • Ruby on Rails Tailoring Controller on NetBeans
  3. 自動生成されたScaffold CodeのViewを修正する
    • flashメッセージの表示
    • Categoryが更新された直後のみ、更新されたことを表示するための修正方法が”Four Days on Rails”にありますが、ここで使っているRailのバージョンが新しいためか、最初からそのような機能が盛りこまれています。ブラウザの表示を見ると緑色で”Category was successfully created.”とあります。
    • templateとlayout間でインスタンス変数を共有させるように修正する
    • headingという名前のインスタンス変数をlist.rhtml, edit.rhtml, new.rhtmlの各templateとcategories.rhtmlというファイル名のlayout間で共有するように修正します。
    • Projectsウィンドウ->ToDoプロジェクト->Views-> categories -> list.rhtmlを開いて、1行目の<h1>Listing categories</h1>を削除して <% @heading = “Categories” %>のようにインスタンス変数headingを定義します。同様に、Views/categoriesフォルダにあるedit.rhtmlの1行目を<% @heading = “Edit Category” %>に、new.rhtmlの1行目を<% @heading = “New Category” %>に修正して各templateでインスタンス変数headingを定義します。
    • Ruby on Rails Sharing Variables between Template and Layout on NetBeans
    • Ruby on Rails Sharing Variables between Template and Layout on NetBeans
    • Ruby on Rails Sharing Variables between Template and Layout on NetBeans
    • Projectsウィンドウ->ToDoプロジェクト->Views-> layouts -> categories.rhtmlを開いて、<body>タグの下に<h1><%= @heading %></h1>を追加します。この行があるとtemplateで定義されているheading変数の値を参照して出力するようになります。このようにlayoutで参照するように修正すると、例えば、どのページのヘッディングにも同じ色を付けたい場合などは各templateで修正しなくてもlayoutファイル一ヶ所の修正で済むようになります。”Four Days on Rails”ではやっていませんが、ここではオリーブ色<h1 style=”color: olive”><%= @heading %></h1>を指定してみました。
    • http://localhost:3000/categoriesをリクエストして、list, edit, newのページを表示すると見出し部分がオリーブ色になっています。
    • Ruby on Rails Output of Sharing Variables between Template and Layout on NetBeans
    • Ruby on Rails Output of Sharing Variables between Template and Layout on NetBeans
    • Ruby on Rails Output of Sharing Variables between Template and Layout on NetBeans
    • 各Templateのマイナーチェンジ
    • “Four Days on Rails”の著者はディフォルトの日付表示が好きではないということでlist.rhtmlにRubyのメソッドstrftime()を使った修正を行っています。ただ、その修正版も見慣れない順番に並んでいるので、馴染のある”月 日,年”にしてみました。その他、著者はShowページは不要との考えで、list.rhtmlからリンクを削除しています。さらにDestroyをDeleteに変更したり、Deleteするときのメッセージを長くしてわかりやすくしたり、複数ページの表示方法をかえたりといった修正を行っています。
    • Ruby on Rails Tailoring Views on NetBeans
    • Ruby on Rails Tailoring Views on NetBeans
    • list.rhtml以外にも_from.rhtml, edit.rhtml, new.rhtmlにも表示のためのマイナーチェンジが行われていますが、インスタンス変数共有のための修正以外はちょっとした修正なのでここでは試していません。

以上でDay 2は終了です。

Leave a Reply