所以我有一个Rails 4.2 app&我在Rails引擎(如AlchemyCMS)的控制器操作中。我想从引擎控制器内部重定向到Rails错误处理控制器。
我试过了:
redirect_to controller: 'ErrorsController', action: 'show', status: 404
遗憾的是,应用程序在引擎名称空间中查找控制器并返回类似:
的内容没有路线匹配{:action =>“show”,:controller =>“alchemy / ErrorsController”,:locale =>“en”,:urlname =>“more”}
答案 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
代码之一,这是有道理的,因为这些代码与重定向相对应。