如何从Engine控制器内部重定向到Rails控制器?

时间:2015-12-17 23:41:02

标签: ruby-on-rails

所以我有一个Rails 4.2 app&我在Rails引擎(如AlchemyCMS)的控制器操作中。我想从引擎控制器内部重定向到Rails错误处理控制器。

我试过了:

redirect_to controller: 'ErrorsController', action: 'show', status: 404

遗憾的是,应用程序在引擎名称空间中查找控制器并返回类似:

的内容

没有路线匹配{:action =>“show”,:controller =>“alchemy / ErrorsController”,:locale =>“en”,:urlname =>“more”}

2 个答案:

答案 0 :(得分:1)

您可以在引擎控制器中引发错误并将其解压缩到应用的application_controller.rb文件中:

rescue_from YourRaisedException do |exception|
  redirect_to controller: 'ErrorsController', action: 'show', status: 404
end

答案 1 :(得分:1)

执行此操作的最Rails-y方法是在config/routes.rb文件中创建路由条目,然后在控制器中使用_url帮助程序(对于重定向,必须为{{} 1}},而非_url。请参阅here)。像

这样的东西
_path

然后在你的EngineController中:

# in config/routes.rb
 match '/404', to: 'errors#show', via: :all, as: :file_not_found

请注意,您无法为重定向指定404状态; docs表示它必须是redirect_to file_not_found_url 代码之一,这是有道理的,因为这些代码与重定向相对应。