4

好吧,标题问题几乎总结了它,但我还是想详细说明一个场景,

我创建了一个 DemoController,(我还没有创建 Resource 模型),我的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

我在这里错过了什么吗?我认为 rails 应该为这种情况渲染动作的模板。

笔记。我知道如果我创建一个像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_name. rake 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

开发日志

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 回答