我正在学习Ruby和Rails,并试图找出最适合我的方案的路径,可能是命名空间和路由。
假设我有一个'Zoo'模型以及'Species'模型。我还需要他们之间的关系,以告诉物种在什么动物园(动物园有很多物种,它们也有自己的属性,如数量,位置等)
我希望我的路线像:
/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
控制器。我觉得我越来越接近理想的结果了,但是我认为我应该对抗框架。仍然遇到一些问题,正确设置关系和路径,必须指定很多配置值
答案 0 :(得分:0)
尝试使用浅嵌套:
http://edgeguides.rubyonrails.org/routing.html#nested-resources
在你的情况下:
resources :zoos
resources :species, shallow :true
答案 1 :(得分: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