ActiveScaffold

いままではRailsに内蔵しているScaffoldを使用してCRUDプログラムを構築してきましたが、さらに機能アップされた、また見栄えのよいActiveScaffoldを取り上げましょう。

1.プロジェクトの生成
  ・NetBeansで[新規プロジェクト]を選択します。

  [ステップ1]プロジェクトを選択
   カテゴリ(C): Ruby
   プロジェクト(P): Ruby on Rails アプリケーション

  [ステップ2]名前と場所
   プロジェクト名(N): proj501
   プロジェクトの場所(l): D:\Rails_Projects
   プロジェクトフォルダ(D): D:\Rails_Projects\proj501
   Rubyプラットフォーム(P): Ruby 1.8.7-p72
   サーバー(S): WEBrick

  [ステップ3]データベース構成
   データベースアダプタ(P): mysql
   データベース名(D): proj501_development
   ユーザー名(M): root
   パスワード(W): *******

  [ステップ4]Railsのインストール
   Railsのバージョン: 2.2.2

  ・proj501が生成されます。
    

2.日本語環境の設定
  ・/config/environment.rbの編集
  ・/app/controllers/application.rbの編集

3.データベースの作成

4.モデルの作成
  住所録テーブルAddressを作成します。
  ・NetBeansで[生成]を選択
    

  ・Railsジェネレータでmodelを作成
   ジェネレート(G):model
   引数(A):Address   (モデル名の先頭文字は大文字とすること)
    

  ・テーブル作成プログラムの実装
   /db/miggrate/yyyymmddhhmmss_create_addresses.rbの編集

/db/miggrate/yyyymmddhhmmss_create_addresses.rb

class CreateAddresses < ActiveRecord::Migration
 def self.up
  create_table :addresses do |t|
   t.string :namae
   t.string :yubin, :limit => 8
   t.string :jusho
   t.string :denwa, :limit=>20

   t.timestamps
  end
 end


 def self.down
  drop_table :addresses
 end
end

5.マイグレーションの実行
  [データベースマイグレーション]より[現在のバージョンへ]を選択する
    

6.ActiveScaffoldのインストール

コマンド プロンプト

C:\Rails_Project\proj501>
ruby script/plugin install git://github.com/activescaffold/active_scaffold.git -r rails-2.2


Initialized empty Git repository in c:/Rails_Project/shopping/vender/pluging/activescaf
fold/active_scaffold/.git/
remote: Counting objects: 214, done.
remote: Compressing objects: 100% (193/193), done.
remote: Total 214 (delta 25), reused 136 (delta 15)
Receiving objects: 100% (214/214), 143.21 KiB, done.
Resolving deltas: 100% (25/25), done.
From git://github.com/activescaffold/active_scaffold
 * branch rails-2.2 -> FETCH_HEAD


(注)インストールが出来ない場合は、直接github.comからダウンロードしてください。

IE以外のブラウザを使いhttp://activescaffold.com/でメインのホームページを呼び出します。
    

githubの画面となるので、download(7)のタブをクリックします。
    

・ダウンロードファイル一覧から2009-06-05日付rails-2.2_22...のzip形式を選択し、
 適当な場所にダウンロードします。
    

・次のファイルを適当な場所に解凍します。
activescaffold-active_scaffold-65e477753a74ef433688fb8010976fa52960d54e.zip

・解凍したファイルを/vender/plugins/フォルダにコピーしactive_scaffoldと名前を変更します。
    

7.日本語リソースファイルの生成
(1) i18nによりリソースファイルの作成

コマンド プロンプト

C:\Rails_Project\proj501>ruby script/generate i18n ja
debug updating environment.rb ...
debug fetching ja.yml fro rails-i18n repository...
exists config/locales
update config/environment.rb
create config/locales/ja.yml
debug 1 models found.
debug 0 translat on keys found in v ews.
debug translating activerecord.models.address ...
debug translating activerecord.attributes.address.namae ...
debug translating activerecord.attributes.address.yubin ...
debug translating activerecord.attributes.address.jusho ...
debug translating activerecord.attributes.address.denwa ...
debug took 1.047 secs to translate.
create config/locales/translation_ja.yml

(2) /config/locales/translation_jp.ymlの更新
まずモデルに関する日本語化を行います。

/config/locales/translation_jp.yml

ja:
activerecord:
models:
address: "住所録"

attributes:
address:
namae: "名前"
yubin: "郵便番号"
jusho: "住所"
denwa: "電話"


(3) layoutファイルの作成
/app/views/layouts/activescaffold.html.erbを作成します。

/app/views/layouts/activescaffold.html.erb

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


&ly;html xmlns="http://www.w3.org/1999/xhtml"
   xml:lang="ja" lang="ja">
 <head>
  <meta http-equiv="Content-Type"
     content="text/html; charset=utf-8"/>
  <title>WBS Main</title>
  <%= javascript_include_tag :defaults %>
  <%= active_scaffold_includes %>
 </head>
 <body>


<%= yield %>


 </body>
</html>

(4) addressesコントローラおよびヘルパーの作成
  NetBeansで生成を選択
   ジェネレータ(G): controller
   名前(N): addresses

(5) addressesコントローラの修正

/app/controls/addresses_controller.rb

class AddressesController < ApplicationController

layout 'activescaffold'


active_scaffold :address do |config|
config.columns = [:namae, :yubin, :jusho, :denwa, :created_at]
config.show.columns = [:id, :namae, :yubin, :jusho, :denwa, :created_at, :updated_at]
config.list.per_page = 10
config.list.sorting = [:yubin => :ASC]
end

end

(6) addressesヘルパーの修正

/app/controls/addresses_helper.rb

# Methods added to this helper will be available to all templates in the application.
module ApplicationHelper

def created_at_column(record)
record[:created_at].strftime("%Y-%m-%d")
end
def updated_at_column(record)
record[:updated_at].strftime("%Y-%m-%d")
end

def created_at_form_column(record, name)
input(:record, :created_at, :name=>name, :order=>[:year,:month,:day], :use_month_numbers=>true)
end
def updated_at_form_column(record, name)
input(:record, :updated_at, :name=>name, :order=>[:year,:month,:day], :use_month_numbers=>true)
end
end


(7) 動作確認
    

(8) 日本語化されていない項目の追加
モデルの日本語化で定義していなかった項目を追加します。

/app/controls/addresses_helper.rb

ja:
activerecord:
models:
address: "住所録"

attributes:
address:
id: "ID"
namae: "名前"
yubin: "郵便番号"
jusho: "住所"
denwa: "電話"

created_at: "作成日"
updated_at: "更新日"


(9) 動作確認
created_atも日本語化されました。
    

(10) ActiveScaffoldメニューの日本語化
/config/locales/translation_jp.ymlの最後尾に追加します。

/config/locales/translation_jp.yml に 追加

active_scaffold:
add: "追加"
add_existing: "Add Existing"
are_you_sure: "本当によろしいですか?"
cancel: "キャンセル"
click_to_edit: "Click to edit"
close: "閉じる"
create: "登録"
create_model: "新規登録"
create_another: "Create Another"
created_model: "Created {{model}}"
create_new: "新規追加"
customize: "Customize"
delete: "削除"
deleted_model: "Deleted {{model}}"
delimiter: "Delimiter"
download: "Download"
edit: "編集"
export: "Export"
filtered: "(検索結果)"
found: "件ありました"
hide: "隠す"
live_search: "リアルタイム検索"
loading…: "Loading…"
nested_for_model: "{{nested_model}} for {{parent_model}}"
next: "次へ"
no_entries: "(登録されていません)"
omit_header: "Omit Header"
options: "Options"
pdf: "PDF"
previous: "前へ"
print: "印刷"
refresh: "再描画"
remove: "除外"
remove_file: "Remove or Replace file"
replace_with_new: "Replace With New"
revisions_for_model: "Revisions for {{model}}"
reset: "リセット"
saving…: "保存中…"
search: "検索"
search_terms: "検索ワード"
_select_: "- select -"
show: "表示"
show_model: "照会中....."
_to_ : " to "
update: "更新"
update_model: "編集中....."
udated_model: "更新しました"

percentage_example: "Ex. 10%"
usa_phone_example: "Ex. 111-333-4444"
usa_money_example: "Ex. 1,333"
usa_zip_example: "Ex. 88888-3333"
ssn_example: "Ex. 555-22-3333"

# error_messages
internal_error: "Request Failed (code 500, Internal Error)"
version_inconsistency: "Version inconsistency - this record has been modified since you started editing it."


(11) 動作確認
(一覧の画面)
    

(新規追加の画面)