ユーザ管理開始

今日の作業

発送機能のまとめ
ユーザ管理機能

わからなかったこと

今日はユーザ管理機能に入ったのですが,
ユーザモデルを実装するときの仕様を理解するのに苦労している。
まずユーザのパスワードはDB内には40文字のハッシュ文字列として格納されるが、
ユーザがフォームで入力するときは平文として入力される。
このためユーザモデルはフォームデータのパスワードを平文で保持しつつ
DBへの書き込みは時にはハッシュ化されたパスワードを使用して
処理をするようにしなければならない。
このへんで???になってきたがまず全部読んでから理解しようと思い読みつづけた。
そこでその処理を実現するにはフック機能やコールバックについての理解が必要だと知った。
けど今日はいい時間なので明日調べよう。

今日の作業でわかったこと

今日の作業ではflash.nowをどういうときに使うのかがわかった。
この前コメントで質問を頂いたときRuby on Rails入門で調べたが
現在実行中のアクションでのみ有効はフラッシュデータを作成する。
とあったが実際どんな場面で使うのかわからなかった。
だが今日の作業で使いかたの一例が知れてたのでよかった。

明日やること

ユーザ管理機能の続き


調べたことのまとめ

機能の発送機能の続き

発送する商品のチェックボックスをオンにして発送ボタンを押すと、
DB内の注文データがシステムによって更新され、更新直後にその時点で、
その時点で未発送の注文リストが再び表示されるようにする。
admin_controller.rbのship()アクションにそれらの機能を実装する。
またこのアクションではフォームデータが送信されるたびに、
何件の注文が発送済みマークされたかもカウントし、
フラッシュを利用して通知する。

01  def ship
02   count = 0
03    if things_to_ship = params[:to_be_shipped]
04      count = do_shipping(things_to_ship)
05      if count > 0
06        flash.now[:notice] = "#{count}件の注文が発送済みとしてマークされました"
07      end
08    end
09    @pending_orders = Order.pending_shipping
10  end
11 
12  private
13  def do_shipping(things_to_ship)
14    count = 0
15    things_to_ship.each do |order_id, do_it|
16      if do_it == "yes"
17        order = Order.find(order_id)
18        order.mark_as_shipped
19        order.save
20        count += 1
21      end
22    end
23    count
24  end

Orderモデルにmark_as_shipped()メソッドを追加

01  def mark_as_shipped
02   self.shipped_at = Time.now
03  end


今回shipアクションの6行目でflash.nowメソッドを使っている。
flash.nowに追加されたメッセージは現在のリクエストにおいてのみ使用できる。
shipビューをレンダリングするときは表示できるが、
セッションには格納されていないため、次のリクエストでは使用できない。
今回はship()メソッドでは最後にリダイレクトを行わず、
直前の発送処理の結果が反映されるようにshipビューを再表示しているのでflash.nowを使用した。

ユーザー管理について

端末で

depot> ruby script/generate controller Login add_user login logout delete_user list_users

RadRailsのGenerateでcontrollerを選んで

login add_user login logout delete_user list_users

を実行すれば

class LoginController < ApplicationController

  def add_user
  end

  def login
  end

  def logout
  end

  def delete_user
  end

  def list_users
  end
end

こんな風にメソッドも同時に生成してくれる。(あとビューも)
ちょっぴり便利。