Rails友好ID路由

时间:2017-10-15 16:02:36

标签: ruby-on-rails

我有一个使用FriendlyID的应用程序。我目前有两个模型,猫和服务,我想从这里转过来:

/cats/some-category
/services/a-service

成:

/some-category
/a-service

我目前每个人都有这样的路由:

resources :cats
resources :services

我希望在后端保持管理功能相同,只需更改前端的路由。

我尝试过使用......

:path => ''

...但它会影响管理员的后端路由。

思想?

1 个答案:

答案 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'

虽然这会起作用,但请注意为什么从长远来看这是一个坏主意。

  1. 首先,一旦项目增长,这将导致很多可能的路线冲突,因为铁路无法在某些情况下正确评估选择哪条路线。

  2. 您将如何处理具有相同友好ID的猫和服务?

  3. 如果你真的想强调友好ID而不是控制器,你可以简单地缩短网址

    resources :cats, as: 'c'