jascaffoldの導入

では、CounselingSessionの一覧、登録、修正、削除の機能を作りますので、jascaffoldを導入します。参考サイトは以下の通り。

ここから、jascaffold-20051228.tar.gzをダウンロードして、vendor/pluginsに展開します。

そして、次のコマンドを実行します。

$ script/generate jascaffold counseling_session reservation                                                                [~/coreserve] 06-06-01  木 10:31
      exists  app/controllers/
      exists  app/helpers/
      create  app/views/reservation
      exists  test/functional/
  dependency  model
      exists    app/models/
      exists    test/unit/
      exists    test/fixtures/
        skip    app/models/counseling_session.rb
        skip    test/unit/counseling_session_test.rb
        skip    test/fixtures/counseling_sessions.yml
      create  app/views/reservation/_form.rhtml
      create  app/views/reservation/list.rhtml
      create  app/views/reservation/show.rhtml
      create  app/views/reservation/new.rhtml
      create  app/views/reservation/edit.rhtml
      create  app/views/reservation/confirm_create.rhtml
      create  app/views/reservation/confirm_update.rhtml
      create  app/views/reservation/confirm_destroy.rhtml
      create  app/controllers/reservation_controller.rb
      create  test/functional/reservation_controller_test.rb
      create  app/helpers/reservation_helper.rb
      create  app/views/layouts/reservation.rhtml
      create  public/stylesheets/scaffold.css
      create  app/helpers/localize_helper.rb
      create  config/localize.yml
      create  db/localized
      create  db/localized/counseling_sessions.yml
      create  app/views/models/counseling_sessions
      create  app/views/models/counseling_sessions/_show1.rhtml
      create  app/views/models/counseling_sessions/_show2.rhtml
      create  app/views/models/counseling_sessions/_edit1.rhtml
      create  app/views/models/counseling_sessions/_edit2.rhtml
      create  app/views/models/counseling_sessions/_hidden.rhtml
      create  app/views/common
      create  app/views/common/_notice.rhtml
      create  app/views/common/_error.rhtml

script/serverを起動して動作確認してみると、しっかり、一覧、参照、編集、削除ができました。当然ながら、counselor_idとclient_idは設定されていません(リレーション関連の操作はできません)が、scaffold(足場)としては充分以上です。jascaffoldバンザイヽ( ・∀・)ノ!

生成した、ReservationControllerに以下の修正をしてみました。

class ReservationController < ApplicationController
  before_filter :login_required # ← ログインを必須にする

  ....
  def new
    @counseling_session = CounselingSession.new
    @counseling_session.start = Time.now             # ← 初期値設定
    @counseling_session.end = Time.now + 60.minutes  # ← 初期値設定
  end

  ....
  def create
    # 生成されたロジック
    # @counseling_session = CounselingSession.new(params[:counseling_session])

    # 変更したロジック
    p = params[:counseling_session]
    start = Time.parse(p[:start])
    end_ = Time.parse(p[:end])
    @counseling_session = current_user.create_session(start, (end_ - start)/60) do |c|
      c.place = p[:place] if p[:place]
      c.memo = p[:memo] if p[:memo]
    end
    ....
  end
end

わずか10行の修正で以下のことができました。

  1. ログインしないとこのページにアクセスできない
  2. ゲストがこのURLにアクセスすると、ログインを促しログイン後に自動的にここに戻る
  3. 新規作成の時、「開始時刻」の初期値として、空白でなく現在時刻を設定する(終了時刻は60分後)
  4. ログインしているカウンセラーに所属するセッションを作成する(counselor_idが正しく設定される)

なんか、物凄い勢いでシステムが出来て行くので、わかってはいてもやっぱり驚きです。