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アプリ作成
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アプリを起動、以下を試す。
- http://localhost:3000/ を開いてアカウントを登録すると、ログインしてTODO一覧画面に遷移する。
- http://localhost:3000/account/logout を開いてログアウト処理を実行すると、ログアウトしてログイン画面に遷移する。
- そのままログインをすると、ログインしてTODO一覧画面に遷移する。
感想
ActiveScaffoldもRails2.0で使えるんだねぇ。
頼まれたデモアプリをこれで作ってみよう。