我为 Rails 应用程序中的路线设置了 RESTful 设置,使用文本永久链接作为资源的 ID。
此外,还有一些特殊的命名路由与命名资源重叠,例如:
# bunch of special URLs for one off views to be exposed, not RESTful
map.connect '/products/specials', :controller => 'products', :action => 'specials'
map.connect '/products/new-in-stock', :controller => 'products', :action => 'new_in_stock'
# the real resource where the products are exposed at
map.resources :products
该Product
模型使用permalink_fu根据名称生成永久链接,并ProductsController
在访问时对永久链接字段进行查找。这一切都很好。
但是,Product
在数据库中创建新记录时,我想验证生成的永久链接是否与特殊 URL 重叠。
如果用户尝试创建一个名为specials
或new-in-stock
什至是普通 Rails RESTful 资源方法(如new
or )的产品edit
,我希望控制器查找路由配置,在模型对象上设置错误,新记录的验证失败,而不是保存它。
我可以硬编码一个已知非法永久链接名称的列表,但这样做似乎很麻烦。我更喜欢挂钩到路由以自动完成。
(控制器和型号名称更改以保护无辜并更容易回答,实际设置比此示例更复杂)