Rails2.0.2をお試し with ActiveScaffold

via: http://www.tkrb.jp/guide/2007/10/ruby_on_rails_1.html
via: http://d.hatena.ne.jp/idesaku/20071211/1197386955

インストール

Rails最新版をインストール。

sudo gem update --system
sudo gem install rails

Railsアプリ作成

Railsアプリを作成し、プラグイン(ユーザ認証、タグ付け、ActiveScaffold)をインストール・初期化し、DBファイル(デフォルトのSQLite3)を作成し、起動するまでの手順。

rails application_name
cd application_name
script/plugin source http://svn.techno-weenie.net/projects/plugins
script/plugin install acts_as_authenticated
script/plugin source http://svn.viney.net.nz/things/rails/plugins/
script/plugin install acts_as_taggable_on_steroids
script/plugin source http://activescaffold.googlecode.com/svn/tags/
script/plugin install active_scaffold
script/generate authenticated user account
script/generate acts_as_taggable_migration
rake db:migrate
mongrel_rails start

ここで http://localhost:3000/account/signup/ を開くと、サインアップ画面が出る。
確認したら、RailsアプリをCtrl+Cで止める。

アプリケーションの機能を作成

TODOリストを作成するとして、ひな形一式をgenerateする*1。ViewはAvticeScaffoldにお任せするので削除。

script/generate scaffold todo caption:string memo:text
rm app/views/todos/*

app/controllers/todo_controller.rb に、ユーザ認証用フィルタと、ActiveScaffold機能を追加する。で、アプリ処理はActiveScaffoldがやってくれるので、Scaffoldが生成したコントローラの中身はバッサリと削除する。

class TodosController < ApplicationController
  before_filter :login_required, :except => [:login]  #この行を追加。
  active_scaffold :todo  #この行を追加。
  #以下の行をざっくり削除。ActivceScaffoldにお任せ。


app/views/layouts/todos.html.erb を編集。既存scaffold用CSS設定は削除し、ActiveScaffold用の設定を追加。

...
<head>
  <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
  <title>OrderItems: <%= controller.action_name %></title>
  <%= stylesheet_link_tag 'scaffold' %> 【この行は削除!!!】
  <%= javascript_include_tag :defaults %> 【この行を追加】
  <%= active_scaffold_includes %> 【この行を追加】
</head>
<body>
...


DBファイルを更新。

rake db:migrate

認証プラグインの調整

app/controllers/account_controller.rb を開き、先頭付近にある認証処理コード

  # Be sure to include AuthenticationSystem in Application Controller instead
  include AuthenticatedSystem
  # If you want "remember me" functionality, add this before_filter to Application Controller
  before_filter :login_from_cookie

以上を切り取り、app/controllers/application.rb に張り付け。こんなかんじ(コメント省略)。

class ApplicationController < ActionController::Base
  include AuthenticatedSystem  #この行
  before_filter :login_from_cookie  #この行

  helper :all # include all helpers, all the time

  protect_from_forgery # :secret => '16c5738cf693cfe5554400ed4580cf46'
end

そして再び app/controllers/account_controller.rb を見て、「login」「signup」「logout」メソッド内にある以下のコード

      redirect_back_or_default(:controller => '/account', :action => 'index')

これを

      redirect_back_or_default(:controller => '/', :action => 'index')

と変更して認証処理後のリダイレクト先のURLを設定。


アプリケーション設定

config/routes.rb を開き、map.root を設定。(コメントアウトを外してコントローラ名を記述)

  map.resources :todos, :active_scaffold => true #先頭付近にあるこの行に、カンマ以降を追記。これをやっておかないと_を含むアクションが正しく呼び出せない。
  map.root :controller => "todos"  #この行を追加。

デフォルトの index.html を、index.html.default 等にリネーム。

mv public/index.html public/index.html.defailt

使ってみる。

mongrel_rails start

してRailsアプリを起動、以下を試す。

  1. http://localhost:3000/ を開いてアカウントを登録すると、ログインしてTODO一覧画面に遷移する。
  2. http://localhost:3000/account/logout を開いてログアウト処理を実行すると、ログアウトしてログイン画面に遷移する。
  3. そのままログインをすると、ログインしてTODO一覧画面に遷移する。

感想

ActiveScaffoldもRails2.0で使えるんだねぇ。
頼まれたデモアプリをこれで作ってみよう。

*1:Rails2.0のscaffoldでは利用するフィールドを指定する必要がある。これでDBのマイグレーションファイルも作ってくれる。(もちろん、こまかい指定は自分で追加しないとダメ)