ITコンサルの日常

ITコンサル会社に勤務する普通のITエンジニアの日常です。

「RailsによるアジャイルWebアプリケーション開発」8章まで読了

↑のsessionの問題以外は特になし。自由課題をやる。

新しい変数をセッションに加えて、ユーザが何回indexアクションにアクセスしたか記録してみましょう。

store_controller.rbのindexに処理を追加。

  def index
    @products = Product.find_products_for_sale

    if session[:counter].nil? then
      session[:counter] = 1
    else
      session[:counter] += 1
    end
  end

上記のカウンタをテンプレートに渡して、カタログページの上部に表示してみましょう。

views/store/index.html.erbに一行追加。

<h1>Pragmaticカタログ</h1>

<%= session[:counter] %>回目の表示です。

<% for product in @products -%>

ユーザがカートに何か入れたときにカウンタが0にリセットされるようにしましょう。

store_controller.rbのadd_to_cartに一行追加

  def add_to_cart
    begin
      product = Product.find(params[:id])
    rescue ActiveRecord::RecordNotFound
      logger.error("無効な商品#{params[:id]}にアクセスしようとしました")
      redirect_to_index("無効な商品です")
    else
      @cart = find_cart
      @cart.add_product(product)
      session[:counter] = nil
    end
  end

エラーの時はリセットしない仕様です。

テンプレートを変更して、カウンタの値が5を超過したときにだけカウンタが表示されるようにしましょう。

views/store/index.html.erbを今度はこうしてみる。

<h1>Pragmaticカタログ</h1>

<% if session[:counter] >= 5 then %><%= session[:counter] %>回目の表示です。
<% end %>

<% for product in @products -%>

JSPチックやなあ。