我有一个公司模型,一个公司可以有很多地点,所以我设置了这样的路线:
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 中所述?