Tuesday, October 13, 2009

Add new user (2) - Reading Tracks (5)

今日の課題


        unless User.no_users_yet? || (@user && @user.is_admin?)
          @page_title = "No signups"
          @admin_email = User.find_admin.preference.admin_email
          render :action => "nosignup", :layout => "login"
          return
        end
Userが登録されているにもかかわらず,admin以外のユーザが登録しようとしても失敗させるためのケース。

        user = User.new(params['user'])
で,モデルUserのインスタンスを生成し,その次の評価で,作成するインスタンスのvalid性を評価している。

        unless user.valid?
          session['new_user'] = user
          redirect_to :action => 'new'
          return
        end
validでないUserインスタンスならば,"/user/new" にリダイレクトさせて,その際にerror内容を表示させるのだろう。

        first_user_signing_up = User.no_users_yet?
        user.is_admin = true if first_user_signing_up
ここで,最初のuser登録かチェックしている。つまり,最初に登録されるユーザは必ずadmin権限を持つようになっている。

        if user.save
          @user = User.authenticate(user.login, params['user']['password'])
          @user.create_preference
          @user.save
          session['user_id'] = @user.id if first_user_signing_up
          notify :notice, "Signup successful for user #{@user.login}."
          redirect_back_or_home
        end
        return
最後に,新しく生成したインスタンスが保存できるのならば,redirect_back_or_home され,処理を終える。

おもしろい。このまま,tracks Applicationの実装を読み進めていこう。それと並行してRails applicationの試作を行ってみたい。

No comments: