T

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/にアクセスしてみる。すると、画面には

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ほど細かい内容のスクリプトは作成されない。

長くなったのでここでいったん切ろう。

Posted by on 12月 30, 2007 in Ruby

Comments

  • […] signupというメソッドが呼び出されたら標題や本文、Fromや宛先が指定されたものになるように変更している。ご覧の通り、generate mailerで作成されたmodelはActionMailerクラスを継承している。続いてこちらをコントローラから呼び出してみる。以前作成したコントローラを利用する。 […]

  • コメントを残す