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 - もちに書きます.