前回はカートアプリケーションの作成し、ブラウザ上に表示するところまできました。
今回は前回ではまだまだ不完全だったところを改良していきたいと思います。
・数量の調整
まず前回の部分で指摘した問題点は数量の表示の問題です。
同じ商品の名前がずらっと同じ行にあるのはあまりスマートとは言えません。
そこで、表示を数量×商品の名前という風にしたいと思います。
新しいモデルapp/models/cart_item.rbを作成し商品情報のproductと数量のquantityを関連付けます。
class CartItem attr_reader :product, :quantity def initialize(product) @product = product @quantity = 1 end def increment_quantity @quantity += 1 end def title @product.title end def price @product.price * @quantity end end
attr_readerでproductとquantityを参照し、initialize(product)メソッドで引数としてproductを与えるとインスタンス変数productには引数を、インスタンス変数quantityには1を代入する。
次に、increment_quantityメソッドはインスタンス変数quantityをインクリメントしています。
titleメソッドとpriceメソッドの中でインスタンス変数の後に.が付いていますがこれは何でしょう?
ここら辺もRubyを勉強していないので分からないという・・・
とりあえず次にapp/models/cart.rbを改良しましょう。
def add_product(product) current_item = @item.find {|item| item.product == product } if current_item current_item.increment_quantity else @items << CartItem.new(product) end end
商品追加のメソッドの改良です。
現在のカートの商品に重複があるかどうかチェックし、あった場合は数量をインクリメント、なかったらカートに新しい商品として放り込む感じのメソッドです。
またこれに関するビューにも手を加えましょう。
ファイルはapp/views/store/add_to_cart.html.erbです
<h2>Pragmaticカート</h2> <ul> <% for item in @cart.items %> <li><%= item.quantity %> × <%=h item.title %></li> <% end %> </ul>
カート内のアイテムを数と×で乗算記号、そしてタイトルという順で表示させるようになっています。
これで完成・・・かな?というわけでブラウザを更新してみましょう!
出来てない・・・orz
ふむ、とりあえず今までのセッションを破棄してみましょう。
> rake db:sessions:clear
そして、カートに入れるボタンを再び押してみると・・・・
おぉ!いけました!
今回はここまで。
今回でこの連載は少しお休みさせていただきます。
この連載はRubyを勉強したのちまた始めさせていただきたいと思います。