ruby-on-rails - 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
解决方案
推荐阅读
- unetstack - UnetStack3 模拟器和音频需要很长时间才能启动
- c# - ConcurrentDictionary 的 AddOrUpdate 方法总是锁定(如果值相等则不跳过)
- python - Celery - 连接被远程主机强行关闭
- javascript - 使用`telnet-client`时套接字不可写
- c# - 在 .NET Core 测试项目 C# 中读取 Excel 并保存到字典或列表中?
- php - 如何消除重复的结果
- python - 从 redis 队列到 azure 容器实例的超时错误
- java - 提高字符串到二进制数转换的性能
- javascript - 如何记录谷歌应用脚本列中所有单元格的值
- python - 如何使用Hashlib对一个数字进行MD5散列?