我有一个使用FriendlyID的应用程序。我目前有两个模型,猫和服务,我想从这里转过来:
/cats/some-category
/services/a-service
成:
/some-category
/a-service
我目前每个人都有这样的路由:
resources :cats
resources :services
我希望在后端保持管理功能相同,只需更改前端的路由。
我尝试过使用......
:path => ''
...但它会影响管理员的后端路由。
思想?
答案 0 :(得分:2)
你无法转身的主要原因
/cats/some-category
/services/a-service
到
/some-category
/a-service
是由于一些明确的路由问题。你最大的问题当然是猫和服务都由不同的控制器处理,而且无法在一条路线上混合两个控制器。
如果你想让这个工作,你应该先建立一个新的控制器,比如FriendlyController
FriendlyController
FriendlyController < ApplicationController do
before_action :set_object
def set_object
@object = Service.find_by(id: params[:id]) || Cats.find_by(id: params[:id])
end
end
并在routes.rb
做类似的事情
get '/:id' => 'friendly#index'
虽然这会起作用,但请注意为什么从长远来看这是一个坏主意。
首先,一旦项目增长,这将导致很多可能的路线冲突,因为铁路无法在某些情况下正确评估选择哪条路线。
您将如何处理具有相同友好ID的猫和服务?
如果你真的想强调友好ID而不是控制器,你可以简单地缩短网址
resources :cats, as: 'c'