Я уже знаю, как настроить вложенные ресурсы в файлах маршрутов… вопрос заключается в том, как сделать это по желанию с той же полезной нагрузкой и с меньшим количеством строк.
Допустим, у меня есть BlogSite
.BlogSite имеет много Posts
, но также имеет много Authors
и много Dates
.(это может быть не лучший пример, но потерпите меня).
Чтобы сделать CRUD на Post
, я хочу иметь возможность использовать
/blog_sites/1/author/2/date/3/posts #all posts on site 1 from author 2 on date 3
/blog_sites/1/author/2/posts #all posts on site 1 from author 2
/blog_sites/1/date/3/posts #all posts on site 1 on date 3
/blog_sites/1/posts #all posts on site 1
/author/2/date/3/posts #all posts from author 2 on date 3
/author/2/posts #all posts from author 2
/date/3/posts #all posts from date 3
/posts #all posts
Так, чтобы любой изпараметры фильтрации могут быть необязательными в URL.Я знаю, что вы можете использовать что-то вроде
get (/blog_sites/:blog_id)(/author/:author_id)(/date/:date_id)/posts => "posts#index"
, но я не хочу терять все преимущества CRUD от использования маршрутизации вложенных ресурсов.В настоящее время мне приходится дублировать большую часть маршрутизации, чтобы она работала, и я ищу лучший способ сделать это:
resources :blog_sites do
resources :authors do
resources :dates do
resources :posts
end
resources :posts
end
resources :dates do
resources :posts
end
resources :posts
end
… и так далее.Это может стать довольно неуправляемым мелким быстро.
Как я могу поддерживать дополнительные URL-адреса параметров, сохраняя маршруты. Rb DRY
и вменяемые?