on Rails : login_generatorを本格的に使ってみる1
on Rails : login_generator - もちで書いた,login_generator.コイツを,いっぺんそのまま使ってみると,ちゃんと使えるか試してみます.
実行環境
図らずも,Rubyとは - はてなキーワードにリンクを貼られたので,ボクのこの記事を参考にする人が居るかもしれないから,実行環境を書いておきます.
アプリケーションの雛形を作る
アプリケーションの雛形が無ければ何も出来ません.ログイン,ログオフを使うようなもの・・・そうですね,簡単な日記サイトを考えてみます.勿論,最後まで作りませんが,いつかコレをもとに作り上げるぞ.
$ rails diary $ cd diary
データベース周り
次に,データベースを作ります.定説通り,diary_development,diary_test,diary_productionを作ります.ユーザは面倒いのでrailsで,パスワードはwibble.
$ mysql -p Enter password: mysql> create database diary_development default character set utf8; mysql> create database diary_test default character set utf8; mysql> create database diary_production default character set utf8; mysql> grant all on diary_development.* to 'rails'@'localhost' identified by 'wibble'; mysql> grant all on diary_test.* to 'rails'@'localhost' identified by 'wibble'; mysql> grant all on diary_production.* to 'rails'@'localhost' identified by 'wibble';
それでは,config/database.ymlを編集します.
development: adapter: mysql database: diary_development username: rails password: wibble host: localhost
testもproductionも,同じ.
本題
さて,やっと本題.login_generatorで,ログイン周りの雛形を作成.モデルUserは自動で作られるので,コントローラの名前を考えます.まぁ適当にAccountでいいや.
$ ruby script/generate login Account
一緒に作成されるREADME_LOGINを読めばわかることですが,モデルUserの要素として始めからあるのは,ログインネームloginと,パスワードpassword.なので,最低でもこれらの要素を持つテーブルをデータベースに作成すれば良い.ついでにユーザの名前nameも追加してしまいましょう.それではmigrationしますよ.
$ ruby script/generate migration create_users
作成された001_create_users.rbの編集をします.
class CreateUsers < ActiveRecord::Migration def self.up create_table :users do |table| table.column :name, :string table.column :login, :string table.column :password, :string end end def self.down drop_table :users end end
次に,実際にテーブルを作成します.
$ rake db:migrate
次に,app/model/user.rbを弄る.弄ると言っても,User.sha1メソッドの,
Digest::SHA1.hexdigest("change_me--#{pass}--")
のchange_meを適当な英文字列に書き換えるだけ.
さて,本来ならコレで必要な要素は揃ったはず.試しにhttp://localhost:3000/account/signupを見てみよう.なんとかsignupの画面は出ているが,実際にユーザ名とパスワードを入力して見ると,「NoMethodError in AccountController」と出るはずだ.少なくとも,ウチの環境では出た.なんでも,「redirect_back_or_default」というメソッドが無いようなのだ.
やっていることを考えるとredirect_toで事足りそうなので,app/controllers/account_controller.rbを開き,redirect_back_or_defaultをredirect_toに置き換えてみる.すると,ちゃんとログインできるはずだ.
追記
ななしさんからの突っ込みで,redirect_back_ro_defaultはちゃんと使えるってことがわかりました.有り難うございます.
ななし 『「redirect_back_or_default」ですが、lib/login_system.rbの中に定義されています。README_LOGINに書いてあるapp/controllers/application.rbへの追加事項としての、
require_dependency "login_system" include LoginSystemの二つを追加すれば使えます。』(2006/11/30 12:36)
READMEはちゃんと読まないとねorzまだこの頃は読む習慣付いてなかったのかな?
本題に戻る
しかし,まだビューも弄ってないし,そもそもrakeでテストが通らないはずだ.と,本当に長くなってしまうので,続きにはon Rails : login_generatorを本格的に使ってみる2 - もちに書きます.