Маршрутизатор для вложенных ресурсов "не обычным" способом Ruby on Rails - PullRequest
0 голосов
/ 06 июля 2011

Я использую Ruby on Rails 3.0.7 и пытаюсь настроить маршрутизацию вложенных ресурсов, чтобы она работала "нерегулярным" способом RoR.

В моем routes.rb файле у меня есть

resources :articles do
  resources :categories, :only => [:index], :controller => 'articles/categories' # The related controller is Articles::CategoriesController
end

, чтобы я мог просматривать следующие URL:

<my_site>/articles/1/categories
<my_site>/articles/2/categories
...

Я хотел бы получить доступ к действиям контроллера new, edit и show для категорий, используя тот же контроллер articles/categories, используемый для указанного выше вложенного ресурса (то есть Articles::CategoriesController), и зайдя по этим URL:

<my_site>/articles/categories/new
<my_site>/articles/categories/edit
<my_site>/articles/categories/1
<my_site>/articles/categories/2
...

Как я могу это сделать? Как мне кодировать роутер?


Может быть, я могу что-то сделать, используя роутер collection метод, подобный этому

resources :articles do
  collection do
   # match something here for the Articles::CategoriesController...
  end

  resources :categories, :only => [:index], :controller => 'articles/categories'
end

но я не знаю, как это сделать.

1 Ответ

0 голосов
/ 06 июля 2011

Я не совсем уверен, что вы пытаетесь сделать с этими маршрутами, поэтому я не совсем уверен, как ответить на ваши вопросы.Если вы хотите добавить новую категорию для определенной статьи или отредактировать все категории для определенной статьи, вы должны передать идентификатор для этой статьи.Если вы пытаетесь создать новую статью и новую категорию одновременно, вам не нужен category в маршруте, просто статья, и вы можете сделать что-то вроде form_for([@article,@category]) в своей форме и использовать build метод в вашем контроллере.Если вы можете уточнить, я мог бы помочь вам в дальнейшем (другими словами, не сложно построить эти маршруты - но это зависит от того, что вы хотите с ними делать.

...