1

我正在学习 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控制器。我觉得我越来越接近预期的结果,但与框架的斗争比我认为的要多。仍然遇到一些问题正确设置关系和路径,必须指定很多配置值

4

2 回答 2

0

嵌套资源:

resources :zoos do # /zoos(/:id)
  resources :species # /zoos/:zoo_id/species(/:species_id)
end

到命名空间:

namespace :zoo do
  resources :posts # /zoo/posts(/:id)
end

如果创建该命名空间,则需要使用类定义创建 app/controllers/zoo/posts_controller.rb:

class Zoo::PostsController < ApplicationController
  # ...
end

注意:嵌套资源和命名空间是两个不同的东西。Rails 路由指南非常易读——你绝对应该这样做: http: //guides.rubyonrails.org/routing.html

于 2013-10-03T04:17:16.093 回答
0

尝试使用浅嵌套:

http://edgeguides.rubyonrails.org/routing.html#nested-resources

在你的情况下:

resources :zoos
  resources :species, shallow :true
于 2013-10-03T03:56:33.960 回答