2013-10-03 3 views
1

Я изучаю Ruby и Rails и пытаюсь найти наиболее правильный путь для моего сценария относительно возможного пространства имен, а также маршрутизации.Ruby on Rails Namespacing и вложенная маршрутизация

Скажем, у меня есть модель «Зоопарк», а также модель «Вид». Мне также нужны отношения между ними, чтобы рассказать, какие виды находятся в каких зоопарках (зоопарк имеет много видов, которые также будут иметь свои собственные свойства, такие как qty, location и т. Д.)

Я хотел бы, чтобы мои маршруты были такими:

/zoo 
/zoo/:id 
... 
/zoo/:zoo_id/species/ 
/zoo/:zoo_id/species/:id 
... 
/species 
/species/:id 

Я пытался возиться с модулями, пространствами имен маршрутов областей и т.д. Я не могу показаться, чтобы получить его, как бы я хотел, и думаю, что должно быть лучше/естественным способом сделать это. Проблема в основном связана с тем, что у меня есть видовая модель, а также видовая модель зоопарка (я пробовал namespacing в Zoo и создавал классы Zoo :: Zoo and Zoo :: Species, создавая класс ZooSpecies и корректирующие маршруты для этих сценариев и т. д.)

С организационной точки зрения было бы здорово иметь класс Zoo и пространство имен Zoo, чтобы иметь Zoo :: Species и т. д., но это невозможно ,

Каков правильный способ организовать что-то подобное?

Update: Моя текущая настройка ...

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

Зачем вам нужны '/ zoo /: zoo_id/species /: id' и'/species /: id'? – tybro0103

+0

Разве связь между зоопарком и видами не будет M: M? – tybro0103

+0

@ tybro0103 - Мне нужны оба маршрута, поэтому я могу показать вид вообще (например: эта страница о зебрах вообще) и информация о виде, который специально находится в зоопарке (например: теперь это много зебр, этот зоопарк имеет, где они находятся и т. д.).И да, это много для многих через ассоциацию. Моя проблема связана, главным образом, с тем, что у меня есть «Species» в целом, а также «ZooSpecies», а затем после этого разработка маршрутизации, чтобы быть дружественной. Поэтому я не уверен, что лучший способ организовать на основе этого факта ... Лучше ли появятся имена под зоопарком в зоопарке? Или класс ZooSpecies затем исправляет маршрутизацию? – Ryan

ответ

0

Для размещения ресурсов:

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

пространство имен:

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

Если вы создаете пространство имен, то вам нужно создать приложение/контроллеры/ZOO/posts_controller.rb с определением класса:

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

Примечание: вложенные ресурсы и пространства имен это две разные вещи. Руководство Rails по маршрутизации очень читаемо, что вы должны определенно сделать: http://guides.rubyonrails.org/routing.html

+0

сторона примечание: '" species ".singularize ==" species ".pluralize' evals to true ... Rails - это классно;) – tybro0103

+0

Проблема с вашим первым вложенным примером ресурсов заключается в том, что у меня есть вид режима, а также мой отношения, которые я назвал ZooSpecies изначально, и теперь это Zoo :: Species. Я обновлю свой вопрос с моими обновленными сведениями о том, как я его настроил сейчас – Ryan

+0

Как ни странно, в моих маршрутах я имел «вид» на моих маршрутах. Я перепутал с ним достаточно, что уже ушел, не знаю, как я там оказался. Я также добавил его как отражение, в противном случае он создавал модели как особые ... странные. – Ryan

Смежные вопросы