orders_controller.rb 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. #---
  2. # Excerpted from "Agile Web Development with Rails",
  3. # published by The Pragmatic Bookshelf.
  4. # Copyrights apply to this code. It may not be used to create training material,
  5. # courses, books, articles, and the like. Contact us if you are in doubt.
  6. # We make no guarantees that this code is fit for any purpose.
  7. # Visit http://www.pragmaticprogrammer.com/titles/rails4 for more book information.
  8. #---
  9. class OrdersController < ApplicationController
  10. skip_before_filter :authorize, only: [:new, :create]
  11. # GET /orders
  12. # GET /orders.json
  13. def index
  14. @orders = Order.paginate page: params[:page], order: 'created_at desc',
  15. per_page: 10
  16. respond_to do |format|
  17. format.html # index.html.erb
  18. format.json { render json: @orders }
  19. end
  20. end
  21. # GET /orders/1
  22. # GET /orders/1.json
  23. def show
  24. @order = Order.find(params[:id])
  25. respond_to do |format|
  26. format.html # show.html.erb
  27. format.json { render json: @order }
  28. end
  29. end
  30. # GET /orders/new
  31. # GET /orders/new.json
  32. def new
  33. @cart = current_cart
  34. if @cart.line_items.empty?
  35. redirect_to store_url, notice: "Your cart is empty"
  36. return
  37. end
  38. @order = Order.new
  39. respond_to do |format|
  40. format.html # new.html.erb
  41. format.json { render json: @order }
  42. end
  43. end
  44. # GET /orders/1/edit
  45. def edit
  46. @order = Order.find(params[:id])
  47. end
  48. # POST /orders
  49. # POST /orders.json
  50. def create
  51. @order = Order.new(params[:order])
  52. @order.add_line_items_from_cart(current_cart)
  53. respond_to do |format|
  54. if @order.save
  55. Cart.destroy(session[:cart_id])
  56. session[:cart_id] = nil
  57. OrderNotifier.received(@order).deliver
  58. format.html { redirect_to store_url, notice:
  59. I18n.t('.thanks') }
  60. format.json { render json: @order, status: :created,
  61. location: @order }
  62. else
  63. @cart = current_cart
  64. format.html { render action: "new" }
  65. format.json { render json: @order.errors,
  66. status: :unprocessable_entity }
  67. end
  68. end
  69. end
  70. # PUT /orders/1
  71. # PUT /orders/1.json
  72. def update
  73. @order = Order.find(params[:id])
  74. respond_to do |format|
  75. if @order.update_attributes(params[:order])
  76. format.html { redirect_to @order, notice: 'Order was successfully updated.' }
  77. format.json { head :no_content }
  78. else
  79. format.html { render action: "edit" }
  80. format.json { render json: @order.errors, status: :unprocessable_entity }
  81. end
  82. end
  83. end
  84. # DELETE /orders/1
  85. # DELETE /orders/1.json
  86. def destroy
  87. @order = Order.find(params[:id])
  88. @order.destroy
  89. respond_to do |format|
  90. format.html { redirect_to orders_url }
  91. format.json { head :no_content }
  92. end
  93. end
  94. end