首页 > 解决方案 > Rails - 具有根 sluggable 路线的多个模型

问题描述

我正在寻求建议以找到适合 Rails 最佳实践的理想解决方案。

我的应用有 5 个模型:

一个地方属于一个类别。一个部门属于一个地方。Subdivision 属于 Division,Item 可以属于 Place、Division 或 Subdivision。

这是我的路线.rb

resources :categories, path: ''

get ':category/:place', to: 'places#show', as: :place
get ':category/:place/:item', to: 'items#show', as: :place_item
get ':category/:place/:division', to: 'divisions#show', as: :division
get ':category/:place/:division/:item', to: 'items#show', as: :division_item
get ':category/:place/:division/:subdivision', to: 'subdivisions#show', as: :subdivision
get ':category/:place/:division/:subdivision/:item', to: 'items#show', as: :subdivision_item

问题是,如果我输入 URL:

/category/place/divison

错误是“找不到项目”。

我目前正在对 slug 使用friendly_id,有没有一种最佳方法来引入一个新模型“Slug”来处理所有 5 个模型的 slug?

可能是这样的?(未测试)

get '/*category_id', :controller => 'slugs'

这是 item_controller:

def show
end

def show_place_item
  render "show"
end

def show_division_item
  render "show"
end

def show_subdivision_item
  render "show"
end

private
    def set_item
      @item = Item.friendly.find(params[:id])
    end

    def item_params
      params.require(:item).permit(:name, :slug, :category_id)
    end

标签: ruby-on-railsruby-on-rails-4routesruby-on-rails-5friendly-id

解决方案


推荐阅读