Rails-маршруты, has_many и необязательный ресурс вложенных ресурсов? - PullRequest
4 голосов
/ 29 января 2012

Я уже знаю, как настроить вложенные ресурсы в файлах маршрутов… вопрос заключается в том, как сделать это по желанию с той же полезной нагрузкой и с меньшим количеством строк.

Допустим, у меня есть 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 и вменяемые?

1 Ответ

4 голосов
/ 13 марта 2012

Попробуйте использовать область и ресурсы вместе. Маршрутизация Rails 3 с ресурсами в необязательной области действия

scope 'blog_sites/:blog_id)(/author/:author_id)(/date/:date_id)' do 
    resources :posts
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...