Moduły aplikacji

Witam,

Właśnie stawiam pierwsze początki z Rails.

Czy w Rails jest możliwość tworzenia modłów aplikacji (np tak jak w Zend Framework: http://framework.zend.com/manual/en/zend.controller.modular.html)? Niestety nie znalazłem nigdzie sensownego rozwiązania…

Niestety z tego co wiem to w RoR nie ma czegoś takiego. Jednak merb (konkurencyjny framework, który wg mnie już jest poważną konkurencją dla rails) posiada tzw “parts”, które pozwalają na wydzielanie takich komponentów.

ale są przestrzenie nazw…
script\generate controller Admin::Product

teraz się męczę z routerami do takich kontrolerów

Przestrzenie nazw to nie to samo co komponenty.

Z czym masz problem? Ja korzystam z zagnieżdżonych kontrolerów i nie mam żadnych.

  1. Co to są te komponenty i jak ich używać w ROR?
  2. Jak zdefiniować router do kontrolera w jakiejś przestrzeni nazw i jak takiego routera użyć w helperze widoku do generowania ulr-i? (link_to, url_to)
  1. komponent wg wikipedii. Tak jak napisałem, RoR miał aspiracje do tego by obsługiwać (jeśli korzystasz z rails < 2.0 to zostanie utworzony katalog ‘components’) jednak nie wyszło im to za bardzo i nie korzysta się z tego.
  1. Chodź krążą plotki, że zagnieżdżanie kontrolerów jest niewygodne, tak absolutnie nie jest.

[code=ruby]generowanie:
./script/generate controller ‘admin/products’

usuwanie
./script/generate controller ‘admin/products’

przekierowanie

redirect_to :controller => ‘admin/products’, :action => ‘list’

named routes

routes.rb

map.admin_products ‘admin/products/:action/:id’, :controller => ‘admin/products’

wygenerowane metody

admin_products_path
admin_products_url

itp[/code]

Od razu polecam dla każdego takiego zagnieżdżenia zrobić kontroler Base, z którego będą dziedziczyć wszystkie kontrolery zagnieżdżone w tej samej przestrzeni (np Admin::ProductsController < Admin::BaseController, a Admin::BaseController < ApplicationController). A potem ustawiasz odpowiednią autoryzację, filtry w Admin::BaseController (oraz to co wspólne) i wszystko chodzi ładnie.

Dokładnie tak robię w Zend Framework i działa to perfekcyjnie.
Wielkie dzięki za wyczerpującą odpowiedź :wink:

Komponenty tak rozumiane (autonomiczne elementy serwisu) wyleciały z RoR 2.0 z powodów wydajnościowych. Szkoda, bo sama koncepcja była niezła. Jeśli potrzebujesz modułowości, trzeba się ograniczyć do partiala i (ewentualnie) metod w application_helper