Простое перенаправление, чтобы показать путь, не работает

#ruby-on-rails #ruby-on-rails-3 #routing

#ruby-on-rails #ruby-on-rails-3 #маршруты

Вопрос:

Я пытаюсь показать ресурс после того, как он был создан.

routes.rb

   resources :eco_systems do
    member do
      get 'new'
      post 'create'
      get 'show'
    end
  end
  

eco_systems_controller.rb

 class EcoSystemsController < ApplicationController
  def new
    @eco_system = EcoSystem.new
  end
  def create
    @eco_system = current_user.eco_systems.create(params[:eco_system])
    redirect_to eco_system_path(@eco_system.id)
  end
  def show

  end
end
  

При redirect_to eco_system_path(@eco_system.id) запуске результирующий URL является

 http://localhost:3000/eco_systems/5
  

Вывод на консоль:

 Started GET "/eco_systems/5" for 127.0.0.1 at 2011-06-14 16:04:22  1000
  Processing by EcoSystemsController#new as HTML
  Parameters: {"id"=>"5"}
  

Но загруженная страница — это новая страница. Почему не загружено действие / представление show?

Комментарии:

1. Почему у вас есть member раздел в вашем routes.rb файле? resources :eco_systems Недостаточно для вашего использования?

Ответ №1:

Это происходит потому, что show действие определено после, new если вы запустите rake routes , вы увидите

  eco_system GET    /eco_systems/:id(.:format)      {:action=>"new", :controller=>"eco_systems"}
            POST   /eco_systems/:id(.:format)      {:action=>"create", :controller=>"eco_systems"}
            GET    /eco_systems/:id(.:format)      {:action=>"show", :controller=>"eco_systems"}
  

когда маршруты проверяются сверху, вызывается первое действие