Rails アジャイル本 第11章 タスクF:ユーザ管理(checkout アクション)
2010年03月27日
リクエストの HTTP メソッドによって checkout
メソッドの振舞いを分けさせる。
GET メソッドの場合はカートの中身の状態(空か否か)によってチェックアウト・フォームの表示を制御する。
POST メソッドの場合は @order
を保存する。
app/controllers/store_controller.rb
def checkout if request.post? # save order @order = Order.new(params[:order]) @order.add_line_items_from_cart(@cart) if @order.save session[:cart] = nil redirect_to_index("Thank you for your order") else render :action => "checkout" end elsif @cart.items.empty? # redirect to index (cart is empty) redirect_to_index("Cart is empty, now") else @order = Order.new end end
チェックアウト・フォームではアクションは save_order から checkout
メソッドの実行に変更する。
app/views/store/checkout.html.erb では checkout
メソッドの url は明示しなくてもよい。
<% form_for :order, :url => { :action => :save_order } do |form| %> ↓のように変更する <% form_for :order do |form| %>
チェックアウト・ボタンで送信されるリクエストに GET メソッドを使用するように修正する。
app/views/store/_cart.html.erb
<%= button_to "Checkout", { :action => "checkout" }, { :disabled => !@order.nil? } %> ↓のように変更する <%= button_to "Checkout", { :action => "checkout" }, { :method => :get, :disabled => !@order.nil? } %>
RailsによるアジャイルWebアプリケーション開発
posted with amazlet at 10.03.15
Sam Ruby David Heinemeier Hansson Dave Thomas
オーム社
売り上げランキング: 29946
オーム社
売り上げランキング: 29946