首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用RoutingError操作控制器::RoutingError

如何使用RoutingError操作控制器::RoutingError
EN

Stack Overflow用户
提问于 2017-01-05 04:19:20
回答 1查看 917关注 0票数 0

我正在根据这里的教程:https://wesleyluyten.com/writing/vanity-urls-for-multiple-controllers-in-rails开发实现虚拟URL

要使虚荣心URL发挥作用,我需要使用这样的机架路由器:

代码语言:javascript
运行
复制
class SlugRouter
  def self.to(action)
    new(action)
  end
  def initialize(action)
    @action = action
  end
  def call(env)
    params = env['action_dispatch.request.path_parameters']
    params[:action] = @action

    sluggable = Slug.where('lower(url) = ?', params[:slug].downcase).first
    model = sluggable.try(:sluggable_type)
    raise ActionController::RoutingError.new('Not Found') if !model

    controller = [model.pluralize.camelize,'Controller'].join
    params[:controller] = model.pluralize.downcase
    controller.constantize.action(params[:action]).call(env)
  end
end

问题是对于raise ActionController::RoutingError.new('Not Found') if !model,这不是很好地处理路由错误。我如何优雅地处理路由错误,重定向到根目录w,一条闪存消息,而现在发生的是rails显示错误页w

代码语言:javascript
运行
复制
ActionController::RoutingError (Not Found):
lib/slug_router.rb:14:in `call'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-05 04:24:35

尝试:

代码语言:javascript
运行
复制
redirect_to root_path, notice: 'Unknown Route' if !model

或者:

代码语言:javascript
运行
复制
if !model
  params[:controller] = 'index'
  IndexController.action('index').call(env)
else
  ...
end
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41477238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档