Ruby on Rails:如何限制嵌套路由



我有一个公司模型,一个公司可以有很多地点,所以我设置了这样的路线:

resources :companies do
  resources :locations
end

我希望能够在路线companies/:company_id/locations/new为公司添加新位置,但是如果我去不存在的公司,例如companies/99999999/locations/new,仍然可以访问此页面。

如何使此页面仅在公司 ID 存在时才可访问?

您可以将before_filter添加到位置控制器(无论如何,您都需要检索嵌套表单和链接的母公司):

class LocationsController < ApplicationController
  before_filter :get_company    
  def get_company
    @company = Company.find(params[:company_id])
  end   
end
这样,导航到

错误公司 ID 下的位置路由将生成典型的未找到 id 异常,如果它不是嵌套资源,您通常会看到该异常。通常,您会在应用程序控制器中处理此异常并重定向到 404 页面。

不确定您是否要在 routes.rb 本身中定义某些内容,但我只是在控制器的操作中验证公司是否存在(并渲染 404,如果这是您想要的,如如何在 Rails 中重定向到 404 中所述?

相关内容

  • 没有找到相关文章