为什么Rails 3.2.2在使用redirect_to时生成带有/ assets前缀的URL?

时间:2012-04-03 21:12:46

标签: ruby-on-rails-3

标题问题几乎总结了一下,但我想详细说明一个场景,

我创建了一个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由重定向生成:

/资产行动=显示&安培;控制器=演示

我在这里缺少某事吗?我认为rails应该为这种情况呈现动作的模板。

请注意。我知道如果我创建一个像 get'show'=&gt;这样的路线“demo#show”并调用 redirect_to show_path 它会正常工作,但我需要知道这是否是强制性的?

非常感谢!

1 个答案:

答案 0 :(得分: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

<强>的routes.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)