# HG changeset patch # User moriq # Date 1205109519 -32400 # Node ID 907a36cf5ba14acb5e98cd144b121081f9eb7ba5 # Parent 755229281e85fe9c6289287423c9004a88158151 order resourceをsingletonに変更する。order.idをsessionに保持する。 --- a/.hgignore Mon Mar 10 03:51:59 2008 +0900 +++ b/.hgignore Mon Mar 10 09:38:39 2008 +0900 @@ -4,3 +4,4 @@ syntax: glob *.sqlite3 schema.rb nbproject +arc --- a/app/controllers/orders_controller.rb Mon Mar 10 03:51:59 2008 +0900 +++ b/app/controllers/orders_controller.rb Mon Mar 10 09:38:39 2008 +0900 @@ -1,19 +1,10 @@ class OrdersController < ApplicationCont class OrdersController < ApplicationController - # GET /orders - # GET /orders.xml - def index - @orders = Order.find(:all) + before_filter :assign_session_order - respond_to do |format| - format.html # index.html.erb - format.xml { render :xml => @orders } - end - end - - # GET /orders/1 - # GET /orders/1.xml + # GET /order + # GET /order.xml def show - @order = Order.find(params[:id]) + # @order = Order.find(params[:id]) respond_to do |format| format.html # show.html.erb @@ -21,10 +12,10 @@ class OrdersController < ApplicationCont end end - # GET /orders/new - # GET /orders/new.xml + # GET /order/new + # GET /order/new.xml def new - @order = Order.new + # @order = Order.new respond_to do |format| format.html # new.html.erb @@ -32,20 +23,20 @@ class OrdersController < ApplicationCont end end - # GET /orders/1/edit + # GET /order/edit def edit - @order = Order.find(params[:id]) + # @order = Order.find(params[:id]) end - # POST /orders - # POST /orders.xml + # POST /order + # POST /order.xml def create - @order = Order.new(params[:order]) + # @order = Order.new(params[:order]) respond_to do |format| if @order.save flash[:notice] = 'Order was successfully created.' - format.html { redirect_to(@order) } + format.html { redirect_to(order_path) } format.xml { render :xml => @order, :status => :created, :location => @order } else format.html { render :action => "new" } @@ -54,15 +45,15 @@ class OrdersController < ApplicationCont end end - # PUT /orders/1 - # PUT /orders/1.xml + # PUT /order + # PUT /order.xml def update - @order = Order.find(params[:id]) + # @order = Order.find(params[:id]) respond_to do |format| if @order.update_attributes(params[:order]) flash[:notice] = 'Order was successfully updated.' - format.html { redirect_to(@order) } + format.html { redirect_to(order_url) } format.xml { head :ok } else format.html { render :action => "edit" } @@ -71,15 +62,24 @@ class OrdersController < ApplicationCont end end - # DELETE /orders/1 - # DELETE /orders/1.xml + # DELETE /order + # DELETE /order.xml def destroy - @order = Order.find(params[:id]) + # @order = Order.find(params[:id]) @order.destroy respond_to do |format| - format.html { redirect_to(orders_url) } + format.html { redirect_to(order_url) } format.xml { head :ok } end end + + private + def assign_session_order + unless session[:order_id].blank? + @order = Order.find(session[:order_id]) + else + @order = Order.create + end + end end --- a/app/views/orders/edit.html.erb Mon Mar 10 03:51:59 2008 +0900 +++ b/app/views/orders/edit.html.erb Mon Mar 10 09:38:39 2008 +0900 @@ -2,7 +2,7 @@ <%= error_messages_for :order %> -<% form_for(@order) do |f| %> +<% form_for(@order, :url => order_path) do |f| %>

Name
<%= f.text_field :name %> @@ -18,5 +18,5 @@

<% end %> -<%= link_to 'Show', @order %> | -<%= link_to 'Back', orders_path %> +<%= link_to 'Show', order_path %> | +<%= link_to 'Back', order_path %> --- a/app/views/orders/new.html.erb Mon Mar 10 03:51:59 2008 +0900 +++ b/app/views/orders/new.html.erb Mon Mar 10 09:38:39 2008 +0900 @@ -2,7 +2,7 @@ <%= error_messages_for :order %> -<% form_for(@order) do |f| %> +<% form_for(@order, :url => order_path) do |f| %>

Name
<%= f.text_field :name %> @@ -18,4 +18,4 @@

<% end %> -<%= link_to 'Back', orders_path %> +<%= link_to 'Back', order_path %> --- a/app/views/orders/show.html.erb Mon Mar 10 03:51:59 2008 +0900 +++ b/app/views/orders/show.html.erb Mon Mar 10 09:38:39 2008 +0900 @@ -9,5 +9,5 @@

-<%= link_to 'Edit', edit_order_path(@order) %> | -<%= link_to 'Back', orders_path %> +<%= link_to 'Edit', edit_order_path %> | +<%= link_to 'Back', order_path %> --- a/config/routes.rb Mon Mar 10 03:51:59 2008 +0900 +++ b/config/routes.rb Mon Mar 10 09:38:39 2008 +0900 @@ -1,7 +1,7 @@ ActionController::Routing::Routes.draw d ActionController::Routing::Routes.draw do |map| map.resources :order_items - map.resources :orders + map.resource :order map.resources :products --- a/test/functional/orders_controller_test.rb Mon Mar 10 03:51:59 2008 +0900 +++ b/test/functional/orders_controller_test.rb Mon Mar 10 09:38:39 2008 +0900 @@ -1,45 +1,59 @@ require File.dirname(__FILE__) + '/../te require File.dirname(__FILE__) + '/../test_helper' class OrdersControllerTest < ActionController::TestCase - def test_should_get_index + def _test_should_get_index + create_session_order get :index assert_response :success assert_not_nil assigns(:orders) end def test_should_get_new + create_session_order get :new assert_response :success end def test_should_create_order - assert_difference('Order.count') do + create_session_order + # TODO: singleton resource はPOSTできないはず。 + assert_difference('Order.count', 0) do post :create, :order => { } end - assert_redirected_to order_path(assigns(:order)) + assert_redirected_to order_path end def test_should_show_order - get :show, :id => orders(:moriq).id + create_session_order + get :show assert_response :success end def test_should_get_edit - get :edit, :id => orders(:moriq).id + create_session_order + get :edit assert_response :success end def test_should_update_order - put :update, :id => orders(:moriq).id, :order => { } - assert_redirected_to order_path(assigns(:order)) + create_session_order + put :update, :order => { } + assert_redirected_to order_path end def test_should_destroy_order + create_session_order assert_difference('Order.count', -1) do - delete :destroy, :id => orders(:moriq).id + delete :destroy end - assert_redirected_to orders_path + assert_redirected_to order_path end + + private + def create_session_order + order = orders(:moriq) + @request.session[:order_id] = order.id + end end