Witam!
Czym różnią się (oprócz innych routingów) map.resources i map.resource ? Zawsze posługiwałem się map.resources. Nawet wtedy gdy dana tabela miała mieć tylko i wyłącznie jeden rekord. Kiedy powinno się używać map.resource, a kiedy map.resources?
Map.resource dotyczy resource’ów singletonowych, tj. jednoegzemplarzowych - założenie chyba było takie, żeby implikowało to brak (niekonieczność) podawania ID.
Dla map.resource nie ma index route.
Kiedy uzywac to kwestia gustu/smaku/wyczucia.
np.
Przu logowaniu jest SessionsController (plural wedle konwencji), ale zawsze chodzi nam tylko o jeden egzemplarz sesji ‘moj’ (new/create/destroy) wiec singular jest bardziej na miejscu (nie podajemy id sesji przy destroy)
Jest UsersController i jest ArticlesController, modele User (has_many :articles) i Article (belongs_to :user)
[code]## routes.rb
normalne routes do operacji na userze
map.resources :users
artykul ma jakiegos autora, do kt. chcielibysmy nawigowac intuicyjnie
map.resources :articles do |article|
# /articles/12/author
article.resource :author, :plural => :users
# RAILS 1.2.x
# article.resource :author, :controller => :users
# 1. niezbyt to ladny konstrukt: /articles/12/user/34
# 2. znajac id artykulu mozemy zidentyfikowac autora
# a ponizsze wprowadza niejednoznacznosc bo ktos moze podac /articles/12/user/24
# i byc pewnym, ze user 24 jest autorem artykulu
# article.resources :users
end
musimy to jeszcze przewidziec w UsersController#show
if params[:article_id]
@user = Article.find(params[:article_id]).user
else
@user = User.find(params[:id])
end[/code]
Dlaczego akurat tak to kwestia sporna, bo ktos powie po co dwie kwerendy gdy wystarczy jedna. To moze nie jast najlepszy przyklad, bardziej odpowiednia bylaby relacja User(has_one :profile) - Profile (belongs_to :user). Profile nie istnieje w separacji od usera wiec zagniezdzenie ma jak najb. sens.