4

さて、タイトルの質問はそれをかなり要約していますが、とにかくシナリオを詳しく説明したいと思います、

DemoControllerを作成しました(リソースモデルは作成していません)。routes.rbは次のようになります。

DispatchMe::Application.routes.draw do
  root to: "demo#index"
end

デモコントローラーから、私は次のように考えています。

class DemoController < ApplicationController
  def index
    redirect_to :action => 'show'
  end

  def show
  end
end

もちろん、 app / views / demo / show.html.erbにファイルがあります。テンプレートがレンダリングされることを期待していましたが、代わりに次のエラーが発生します。

ActionController :: RoutingError([GET] "/assets"に一致するルートはありません)

このURLは、リダイレクトの結果として生成されます。

/ Assets?action = show&controller = demo

ここで何かが足りませんか?レールはそのような場合のアクションのテンプレートをレンダリングすることになっていると思いました。

ノート。get'show ' => "demo#show"のようなルートを作成し、redirect_to show_pathを呼び出すと、問題なく機能することを理解していますが、それが必須かどうかを知る必要がありますか?

どうもありがとうございます!

4

1 に答える 1

1

目的の動作には、次renderの代わりに使用しredirect_toます。

class PagesController < ApplicationController
  def index
    render :action => "show"
  end

  def show
  end
end

編集:

他のアクションでも使用できますredirect_toが、私が知る限り、インデックスアクションはベースパスを設定します。ルート定義を簡略化するには、を使用しますresources :controller_namerake routesコマンドラインに入力すると、リソースによって生成されたルートを表示できます。

例:

demo_controller.rb

class DemoController < ApplicationController
  def index
  end

  def show
    redirect_to :action => 'index'
  end
end

ルート.rb

DispatchMe::Application.routes.draw do
  root to: "demo#index"
  resources :demo
end

development.log

Started GET "/demo/show" for 127.0.0.1 at 2012-04-04 14:55:25 -0400
Processing by DemoController#show as HTML
  Parameters: {"id"=>"show"}
Redirected to http://dispatch.dev/
Completed 302 Found in 0ms (ActiveRecord: 0.0ms)
于 2012-04-04T15:50:06.660 に答える