标题问题几乎总结了一下,但我想详细说明一个场景,
我创建了一个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 它会正常工作,但我需要知道这是否是强制性的?
非常感谢!
答案 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)