Rails route - >如果没有数据,请检查另一条路线

时间:2013-08-26 12:42:37

标签: ruby-on-rails routes

我有路线

  match ":id", :to => "doctors#show", :via => :get, :as => :doctor
  match ":id", :to => "doctors#update", :via => :put, :as => :doctor

这给了我:

http://domain.com/ID

现在,我创建了另一个控制器,我也希望路径与之前几乎相同。

  match ":id", :to => "professions#show", :via => :get, :as => :profession

这给了我:

http://domain.com/ID

但是,我想创建一些检查系统,例如:如果第一条路线没有找到任何数据,请去检查另一条。他们肯定不会在任何时候都一样。


这是我在控制器中显示的代码:

  def show

     @profession = Profession.find_by_slug(params[:id])

  end

2 个答案:

答案 0 :(得分:0)

异常处理是控制器的工作,但不是路由。

拯救没有记录错误

class ApplicationController < ActionController::Base
  rescue_from ActiveRecord::RecordNotFound, with: :record_not_found

  private

  def record_not_found
    render text: "404 Not Found", status: 404
  end
end

http://guides.rubyonrails.org/action_controller_overview.html#the-default-500-and-404-templates

答案 1 :(得分:0)

您可以使用评论中指出的@techvineet方法,制作一个接收ID的“路由器模块”或制作“路由器控制器”。

此控制器/模块将首先尝试获取Doctor,如果引发异常,则会尝试获取专业。