1

我有一个 Rails 应用程序,其中有两个部分,因此我想为错误页面使用两种不同的布局。

例如,如果错误来自第 1 节,则 layout1 / 不同页面应用于错误 (404, 500)。

如果错误来自第 2 部分,则应将 layout2 / 不同页面用于错误(404、500)。

我编写了代码来定义错误页面,启用了 erb 和 ruby​​ 代码。

在应用程序.rb

config.exceptions_app = self.routes

在路线.rb

match "/404", :to => "errors#error_404"
match "/500", :to => "errors#error_500"
4

2 回答 2

1

更新

稍微想了想。如果您只有几种类型的错误,那么这样做怎么样?

在你routes.rb最后一行,添加一个

match '/my_segment/*path', :to => 'errors#not_found'

这应该匹配任何未定义的路径(通常会抛出ActionController::RoutingError)并将其推送到您的全局错误页面。

您可以使用上面的段通配符玩游戏以获得正确的路径。这不应该影响您的预定义路径,例如mydomain.com/controller1.

下面是一种更细粒度的控制方法。

这将帮助您匹配来自mydomain.com/some_controller/bad_params

def firstController < ApplicationController 
  def method_in_first_controller
    # Do something here
    rescue
      @error = # Error object here
      render :template=>"some_error_template", :status => :not_found # In specific action
  end
end


def secondController < ApplicationController 
  rescue_from ActiveRecord::RecordNotFound, :with => :rescue_not_found # In secondController

  def method_in_second_controller 
    # Do something  
  end

  protected
  def rescue_not_found
    @error = # Error object here
    render :template => 'some_error_template', :status => :not_found
  end

end

def ApplicationController 
  rescue_from ActiveRecord::RecordNotFound, :with => :rescue_not_found # Globally

  protected
  def rescue_not_found
    @error = # Error object here
    render :template => 'application/not_found', :status => :not_found
  end
end

使用推荐人似乎无济于事,对于昨天的错误答案感到抱歉。

于 2012-07-24T15:31:54.690 回答
0

在您的错误控制器中,您可以检查谁是引荐来源并基于此进行条件布局

于 2012-07-24T14:45:55.620 回答