Rails2.0.2のヘルプ、中身拝見(2)
さて、Railsでアプリケーションのひな形を作成したら、まずはgenerateを試してみたくなるのが人情というものだ。
$ rails test --database=mysql $ cd test $ ruby ./script/generate --help
ここでもヘルプをいちいちみていくことにしよう。
おっと、その前に。ここではデータベースにMySQLを指定したけれど、別に本格的なものを作るわけではないのでデフォルトのSQLite3でも問題はなかった。そもそもMySQLをセットアップしないといけないので、むしろMySQLの方が面倒かもしれない。
MySQLを指定すると、conf/database.ymlにそれっぽい設定が作られる。
$ cat config/database.yml # On Mac OS X Leopard: # sudo env ARCHFLAGS="-arch i386" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config # This sets the ARCHFLAGS environment variable to your native architecture # On Windows: # gem install mysql # Choose the win32 build. # Install MySQL and put its /bin directory on your path. # # And be sure to use new-style password hashing: # http://dev.mysql.com/doc/refman/5.0/en/old-client.html development: adapter: mysql encoding: utf8 database: test_development username: root password: socket: /tmp/mysql.sock # Warning: The database defined as 'test' will be erased and # re-generated from your development database when you run 'rake'. # Do not set this db to the same as development or production. test: adapter: mysql encoding: utf8 database: test_test username: root password: socket: /tmp/mysql.sock production: adapter: mysql encoding: utf8 database: test_production username: root password: socket: /tmp/mysql.sock
で、この設定で接続可能な状態にMySQLがセットアップされている必要がある。
さて、話を戻そう。
といっても、railsコマンドと基本的には全く同じなので、細かいオプションは飛ばして、利用できるGeneratorについて調べてみよう。Generatorというのは、実際にgenerateコマンドが作成するファイルの内容を定義しているもので、組み込みのもの以外も後から入手可能になっている。下のコマンドであれこれ探しまわることができる。
$ gem search -r generator
ずらずらとたくさん表示される。面白そうだが、ここではビルトインのGeneratorのみ確認する。
controller
使い方:$ ruby script/generator controller ControllerName [options]
新しいコントローラとビューのスタブを作成する。コントローラの名前はキャメルケース(CamelCase)やアンダースコアで繋げたものが使える。引数としてビューの名前を渡す。
Railsのコントローラは、本来のMVC構造でいうところのCはRails自体が処理しているので、いうなればコントローラから呼び出されるアクションのコントローラみたいなものになる。つまり、http://example.com/test/にアクセスすると、Rails側でこのリクエストを処理するアクションはtestであると判定して、testというコントローラに処理が引き渡される。testはこのアクションのコントローラとして振る舞う。こういうこと自体を引き受けている上位のコントローラはRailsが持っている、ということだ。通常、コントローラはapps/controllers以下に配置される。この場合、apps/controllers/test_controller.rbというファイルになる。
また、Railsにはモジュールという概念もあって、http://example.com/module_name/test/へのリクエストはapps/controllers/module_name/以下に配置されたtest_controller.rbというファイルがコントローラに指定される。アクションをジャンルで分けたり、なにかと整理が大変な大規模なシステムなんかで重宝するだろう。この場合は、引数をクォートで囲んで指定するようだ。
$ ruby script/generator controller 'module_name/test' list new delete
ちょっと動かしてみよう。とりあえず、listという名前のコントローラを作ってみる。何かの一覧だから、これに付随する機能としては、インデックスと新規作成、編集、削除があればいいとしよう。
$ ruby script/generate controller list index create edit delete exists app/controllers/ exists app/helpers/ create app/views/list exists test/functional/ create app/controllers/list_controller.rb create test/functional/list_controller_test.rb create app/helpers/list_helper.rb create app/views/list/index.html.erb create app/views/list/create.html.erb create app/views/list/edit.html.erb create app/views/list/delete.html.erb
確かにcontrollerとview以下にファイルが作成された。generateに渡した引数の最初はコントローラの作成を指示するもの、次は作成するコントローラの名前、以降は全部作成するviewの名前だ。これでちょっとブラウザから結果を見てみよう。ruby scritp/serverでウェブサーバを起動したら、http://localhost:3000/list/にアクセスしてみる。すると、画面には
こんなメッセージが表示されている。この画面表示を担当しているビューのファイル名が記されているのがわかる。この場合はapp/views/list/index.html.erbがビュー用のファイルだ。
List#indexというのは、コントローラクラスのList(正確にはListController)の中のメソッドとして定義されているindexが実行されているという意味になる。Rubyではクラス名の最初は大文字なので、コントローラの名前としてlistを指定してもクラス名はListContorllerになる。
先ほど実行したコマンドでは、同じくhttp://localhost:3000/list/create/やhttp://localhost:3000/list/edit/、http://localhost:3000/list/delete/にアクセスすると、それぞれ似たような画面が表示される。後でみるscaffoldほど細かい内容のスクリプトは作成されない。
長くなったのでここでいったん切ろう。
Comments
[…] signupというメソッドが呼び出されたら標題や本文、Fromや宛先が指定されたものになるように変更している。ご覧の通り、generate mailerで作成されたmodelはActionMailerクラスを継承している。続いてこちらをコントローラから呼び出してみる。以前作成したコントローラを利用する。 […]