rails,允许路由通配中的异常

时间:2012-05-27 04:16:51

标签: ruby-on-rails routes glob

我想知道我是否可以添加一个例外来路由轨道中的globbing。在我的routes.rb我有

    unless params[:not_found].eql? 'admin_data'
         match '*not_found', to: 'errors#error_404'
    end

我试图强制执行自定义错误页面,除非用户访问

myapp.heroku.com/admin_data

它似乎不像抓取:not_found作为param工作。有没有办法在routes.rb中添加例外?

如果有帮助,在我的errors_controller中我有..

  def error_404
        @not_found_path = params[:not_found]
  end

谢谢

更新

我试过做

puts :not_found
puts %{not_found}

但似乎没有工作嗯...我试图看看我是否可以从用户检索参数

2 个答案:

答案 0 :(得分:1)

在routes.rb中定义允许的路由并在应用程序控制器中添加异常处理以便路由错误会更方便:

class ApplicationController < ActionController::Base
  rescue_from ActionController::RoutingError, :with => :render_not_found

  private
    def render_not_found 
      render_error_page_for(404)
    end

    def render_error_page_for(code)
      respond_to do |format|
      format.html { render :file => "#{Rails.root}/public/#{code}.html", :status => code, :layout => false }
    end
end

答案 1 :(得分:0)

我确实在应用程序控制器中捕获了异常处理但不幸的是对于admin_data,我没有在routes.rb中明确设置它。它在gem中的某个地方配置了命名空间或其他东西(我不太确定)

但积极的一面......我终于修好了!我改变了我的全局并做了......

match '*not_found', to: 'errors#error_404', :constraints => {:subdomain => "!(admin_data.)"}

忽略使用admin_data的所有内容。