【发布时间】:2026-02-12 14:40:01
【问题描述】:
我正在学习 Ruby 和 Rails,并试图找出最正确的路径来解决可能的命名空间和路由问题。
假设我有一个“动物园”模型和“物种”模型。我还需要它们之间的关系来判断动物园中有哪些物种(动物园有很多物种,它们也有自己的属性,如数量、位置等)
我希望我的路线是这样的:
/zoo
/zoo/:id
...
/zoo/:zoo_id/species/
/zoo/:zoo_id/species/:id
...
/species
/species/:id
我尝试过处理模块、命名空间、路由范围等。我似乎无法理解我想要的方式,并认为必须有更好/自然的方式来做到这一点。问题主要是因为我有一个物种模型以及一个动物园的物种模型(我已经尝试对 Zoo 进行命名空间并创建 Zoo::Zoo 和 Zoo::Species 类,创建 ZooSpecies 类,以及为这些场景调整路线等)
从组织的角度来看,能够拥有 Zoo 类以及 Zoo 命名空间、拥有 Zoo::Species 等会很棒,但这是不可能的。
组织这样的事情的正确方法是什么?
更新:我目前的设置...
Zoo Module
Zoo::Zoo Class
Zoo::Species Class
Species Class
路线:
resources :zoos, path: 'zoos' do
resources :zoo_species, path: 'species', as: 'species', controller: 'zoo/species'
end
还有一个Zoo 控制器和一个Zoo::Species 控制器。我觉得我越来越接近预期的结果,但与框架的斗争比我认为的要多。在正确设置关系和路径时仍然遇到一些问题,必须指定很多配置值
【问题讨论】:
-
为什么要同时使用
/zoo/:zoo_id/species/:id和/species/:id? -
动物园和物种之间的关系难道不是 M:M 吗?
-
@tybro0103 - 我想要两条路线,这样我就可以展示一般的物种(例如:这个页面是关于一般的斑马)和关于动物园里特定物种的信息(例如:这是现在这个动物园有很多斑马,它们在哪里,等等)。是的,通过协会是多对多的。我的问题主要是因为我通常有“物种”以及“动物园物种”,然后制定出友好的路线。所以我不确定基于这一事实的最佳组织方式......在 Zoo 下命名的 Species 会是最好的吗?或者一个 ZooSpecies 类然后修复路由?
标签: ruby-on-rails ruby routes ruby-on-rails-4 rails-routing