Rails2.0.2をお試し。

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アプリを作成し、プラグイン(ユーザ認証、タグ付け)をインストール・初期化し、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/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

script/generate scaffold todo caption:string memo:text

app/controllers/todo_controller.rb にユーザ認証のためのフィルタを追加する。

class TodosController < ApplicationController
  before_filter :login_required, :except => [:login]  #この行を追加。
  ...

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/application.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.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一覧画面に遷移する。

感想

scaffoldの使い方が変わったけど、今のところは1.2と同じかんじ。
でも中身はRESTfulらしい。ちゃんと読まんといかんか。

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