Сложный маршрут и генерация URL в Rails - PullRequest
1 голос
/ 18 мая 2011

У меня есть групповая модель, которая has_many модель товара.И я хочу использовать следующий шаблон URL "{group_id} / {article_id}".

, поэтому я написал эти коды маршрутов:

resource :groups do
  resource :articles
end
match ':group_id/:id(.:format)', :to => 'articles#show', :as => :article
match ':id', :to => 'groups#show', :as => :group

Но рельсы не могут генерировать правильный URL для группызаписи и записи статей.Как я могу заменить автоматически сгенерированные article_path и group_path для соответствия моим маршрутам?

1 Ответ

1 голос
/ 18 мая 2011

У вас проблемы, потому что вы не ожидаете плюрализации.Когда вы определяете единственный маршрут resource, Rails не рассматривает его как коллекцию, в которой вы бы ссылались на каждого участника с id.Вместо этого вам нужно множественное число resources для групп и статей:

resources :groups do
  resources :articles
end

Генерирует следующие маршруты:

    group_articles GET    /groups/:group_id/articles(.:format)          {:action=>"index", :controller=>"articles"}
                   POST   /groups/:group_id/articles(.:format)          {:action=>"create", :controller=>"articles"}
 new_group_article GET    /groups/:group_id/articles/new(.:format)      {:action=>"new", :controller=>"articles"}
edit_group_article GET    /groups/:group_id/articles/:id/edit(.:format) {:action=>"edit", :controller=>"articles"}
     group_article GET    /groups/:group_id/articles/:id(.:format)      {:action=>"show", :controller=>"articles"}
                   PUT    /groups/:group_id/articles/:id(.:format)      {:action=>"update", :controller=>"articles"}
                   DELETE /groups/:group_id/articles/:id(.:format)      {:action=>"destroy", :controller=>"articles"}
            groups GET    /groups(.:format)                             {:action=>"index", :controller=>"groups"}
                   POST   /groups(.:format)                             {:action=>"create", :controller=>"groups"}
         new_group GET    /groups/new(.:format)                         {:action=>"new", :controller=>"groups"}
        edit_group GET    /groups/:id/edit(.:format)                    {:action=>"edit", :controller=>"groups"}
             group GET    /groups/:id(.:format)                         {:action=>"show", :controller=>"groups"}
                   PUT    /groups/:id(.:format)                         {:action=>"update", :controller=>"groups"}
                   DELETE /groups/:id(.:format)                         {:action=>"destroy", :controller=>"groups"}

Если вы хотите отменить groups и articles сегменты, которые вы можете передать :path => '' каждому из определений resources, но вам придется действовать осторожно, потому что любой запрос к http://example.com/1/2 будет соответствовать статье в группах и будет неинформативным для конечных пользователей икак боты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...