Вложенные в Rails рурсы и маршруты и как их настроить в route.rb - PullRequest
1 голос
/ 22 апреля 2011

Я думаю, что у меня есть указатель на вложенные маршруты (отличные помощники по URL, доступ и многое другое) и вложенные ресурсы в формах с accepts_nested_attributes_for, но что я использую в маршрутах, так как вижу оба:

resources :schools do
   resources :documents
end

, а также

resources :schools :has_many => :documents
end

подскажите, пожалуйста, чем они отличаются.
Очевидно, has_many для отношений один ко многим. он создает помощники пути и требует правильной маршрутизации, а для блока do, какие отношения это подразумевает, нет? только помощники пути (/ школы / документы) и что, если я хочу, чтобы в школах было несколько ресурсов (кроме книг, скажем, документов), первый способ, которым я могу добавить его в блок do-end, но как насчет второго, всего две строки по одному на каждого has_many?
Хотя я читал руководства и API, я не совсем понимаю разницу / использование здесь, и любой, кто может дать четкое объяснение различия между ними (в форме «а делает х, тогда как б делает у», было бы здорово ) будет высоко ценится:)

Да, и, конечно, как они связаны с наличием has_many в модели - поэтому я предполагаю, что эти отношения могут быть в модели с has_many, контроллером (в основном через использование путей) и в представлении (через формы с вложенными атрибутами). ).

Ответы [ 2 ]

1 голос
/ 22 апреля 2011

Они оба делают одно и то же, вам решать, какой из них

Я предпочитаю формат блока do, поскольку его легче читать

btw с форматом has_many, который вы можете сделать :has_many => [:docs, :otherthings] для нескольких вложенных маршрутов

0 голосов
/ 22 апреля 2011

Я думаю, что синтаксис has_many был добавлен в Rails 2 как сокращение для тех, кому не понравился блочный синтаксис. Вы можете увидеть сообщение в блоге об этом здесь . Я только что попробовал, и кажется, что Rails 3 игнорирует опцию has_many. Таким образом, результат для меня был:

resources :schools do
   resources :documents
end

создал маршруты:

    school_documents GET    /schools/:school_id/documents(.:format)          {:action=>"index", :controller=>"documents"}
                     POST   /schools/:school_id/documents(.:format)          {:action=>"create", :controller=>"documents"}
 new_school_document GET    /schools/:school_id/documents/new(.:format)      {:action=>"new", :controller=>"documents"}
edit_school_document GET    /schools/:school_id/documents/:id/edit(.:format) {:action=>"edit", :controller=>"documents"}
     school_document GET    /schools/:school_id/documents/:id(.:format)      {:action=>"show", :controller=>"documents"}
                     PUT    /schools/:school_id/documents/:id(.:format)      {:action=>"update", :controller=>"documents"}
                     DELETE /schools/:school_id/documents/:id(.:format)      {:action=>"destroy", :controller=>"documents"}
             schools GET    /schools(.:format)                               {:action=>"index", :controller=>"schools"}
                     POST   /schools(.:format)                               {:action=>"create", :controller=>"schools"}
          new_school GET    /schools/new(.:format)                           {:action=>"new", :controller=>"schools"}
         edit_school GET    /schools/:id/edit(.:format)                      {:action=>"edit", :controller=>"schools"}
              school GET    /schools/:id(.:format)                           {:action=>"show", :controller=>"schools"}
                     PUT    /schools/:id(.:format)                           {:action=>"update", :controller=>"schools"}
                     DELETE /schools/:id(.:format)                           {:action=>"destroy", :controller=>"schools"}

, а

resources :schools :has_many => :documents

создал маршруты:

    schools GET    /schools(.:format)          {:action=>"index", :controller=>"schools"}
            POST   /schools(.:format)          {:action=>"create", :controller=>"schools"}
 new_school GET    /schools/new(.:format)      {:action=>"new", :controller=>"schools"}
edit_school GET    /schools/:id/edit(.:format) {:action=>"edit", :controller=>"schools"}
     school GET    /schools/:id(.:format)      {:action=>"show", :controller=>"schools"}
            PUT    /schools/:id(.:format)      {:action=>"update", :controller=>"schools"}
            DELETE /schools/:id(.:format)      {:action=>"destroy", :controller=>"schools"}

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

...