RoRで
テスト用のデータソースを迅速に作成
ビデオオンラインチュートリアルでは教材に使用するデータソースとして、
ローカルに置いたXMLファイルを使用していまし
たが
ここではRuby on Rails(今後はRoRとする)で
テスト用のデータソースを迅速に作成し、
OpenLaszloのdatasetにデータソースを定義します。
1. RoRプロジェクトの作成
2. scaffold機能を使ってデータベース定義の作成
- さて、ここでRoRのscaffold機能を使ってコントローラ、
モデルとともにデータベース定義、最低限のCRUD機能
を持ったビューを一挙に自動生成します。
IDEでプロジェクトルートにマウスカーソルを当て、右クリック ->
生成を選択するとRailsジェネレータのWizardが現れるので
次のように入力して了解をクリックします。
生成:scaffold
モデル名:restaurant
属性ペア:street:string description:string name:string city:string
すると大量のファイルが生成されましたね。
scaffoldとは土台、基礎という意味で、これから作成・修正してステップアップしてゆくコンテンツの大元を
自動的に作成する機能で、使う・使わないにかかわらず一様に作成します。
コンソールには次のメッセージが現れます。
JRuby limited openssl loaded. gem install jruby-openssl for full support.
http://wiki.jruby.org/wiki/JRuby_Builtin_OpenSSL
exists app/models/
exists app/controllers/
exists app/helpers/
create app/views/restaurants
exists app/views/layouts/
exists test/functional/
exists test/unit/
create app/views/restaurants/index.html.erb
create app/views/restaurants/show.html.erb
create app/views/restaurants/new.html.erb
create app/views/restaurants/edit.html.erb
create app/views/layouts/restaurants.html.erb
create public/stylesheets/scaffold.css
dependency model
exists app/models/
exists test/unit/
exists test/fixtures/
create app/models/restaurant.rb
create test/unit/restaurant_test.rb
create test/fixtures/restaurants.yml
create db/migrate
create db/migrate/001_create_restaurants.rb
create app/controllers/restaurants_controller.rb
create test/functional/restaurants_controller_test.rb
create app/helpers/restaurants_helper.rb
route map.resources :restaurants
3. Rake機能を使ってデータベースの作成
- この後、IDEからデーベース操作をしてテーブルを作成
できます。
まず、データベースですが、
IDEでプロジェクトルートにマウスカーソルを当て、
右クリック ->
Rakeタスクの実行 -> db -> create を実行します。
これでMySQLにrestaurant_lzx_developmentの名称で
データベースが作成されました。
- データベースが作成されない場合は手動で作成してください。
このデータベースに
テーブルを作成するには次の操作をします。
- 先ほどのscaffold操作で既に001_create_restaurants.rbというファイルが作成されています。
このファイルの無いようです。Rails流のテーブル定義がなされています。
class CreateRestaurants < ActiveRecord::Migration
def self.up
create_table :restaurants do |t|
t.string :street
t.string :description
t.string :name
t.string :city
t.timestamps
end
end
def self.down
drop_table :restaurants
end
end
IDEでプロジェクトルートにマウスカーソルを当て、右クリック ->
データベースマイグレション -> 現在のバージョンへ
を実行します。
あ、失敗しましたね。
コンソールには次のメッセージが現れました。
(in C:/ANetBeans6.1/openlaszlo411/restaurant_lz)
rake aborted!
The driver encountered an error: java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: NO)
(See full trace by running task with --trace)
ここをクリックし、追跡を有効にしてタスクを再実行してください
- 原因はconfigディレクトリに作成されたdatabase_.ymlにデータベースアクセスのユーザ、パスワードを
定義していなかったからです。定義してもう一度実行します。
今度はうまくゆきましたね。
コンソールには次のメッセージが現れました。(in C:/ANetBeans6.1/openlaszlo/restaurant_lzx)
(in C:/ANetBeans6.1/openlaszlo411/restaurant_lzx)
== 1 CreateRestaurants: migrating =============================================
-- create_table(:restaurants)
-> 0.1455s
== 1 CreateRestaurants: migrated (0.1474s) ====================================
- これで restaurants という名称のテーブルが作成
されました。モデルの名称の複数形で作成されます。
データベースが作成されますと、もうRailsアプリケーションが
起動でき、このCRUD機能で中身も入力できます。
- ここでrestaurtns_lzx名称のRailsプロジェクトを実行させます。
するとRoR機能に内臓のWEBrickという
WEBサーバーがポート3000で起動し、Welcome aboard
という画面が現れます。
この画面が現れたときの
URL: http://localhost:3000/ をURL: http://localhost:3000/restaurants/ように修正
してやると
restaurtns_lzxプロジェクトのデータベースをアクセスする最初の画面が現れます。
- ここでNew restaurantをクリックするとデータベースへの
入力画面が現れます。
この操作で一つづつ入力することも可能ですが、
既に入力済みのデータがありますので、
それを
データベース操作ツールSQLyogを使って注入します。
データ注入後のrestaurantsのリストはこのように
見えます。
ところがブラウザでURLに.xmlを付加して
URL: http://localhost:3000/restaurants.xml として
表示すると、
便利なことにrestaurantsテーブルの
内容をXML形式で表示してくれるのです。