2010-08-28 7 views
1

Prenons l'exemple le plus simple:Que fait exactement "map.resource" dans le fichier de route?

map.resource:account 

1) Quelle différence est de définir toutes les routes nom - comme:

: map.new_account "new_account",: controller => "activité ",: action =>" new "

2) Comment définir un itinéraire supplémentaire dans la définition de ressource? Par exemple, disons il y a une méthode plus pour la ressource

: map.brand_new_action "brand_new_action",: controller => "activité",: action => "brand_new_action"

Est-ce que nous venons de ajoutez-le ci-dessous? Mais cela semble vaincre le point de la ressource

Répondre

3

Quelle différence est-il de définir toutes les routes manuellement?

Ce n'est pas différent, en ce sens que c'est plus pratique. Pourquoi voudriez-vous définir tous vos itinéraires à la main, cela peut être assez fastidieux. Ainsi, les actions CRUD communes sont automatiquement mises en correspondance, ci-dessous est un exemple en utilisant un contrôleur de contacts:

map.resources :contacts 

... or in Rails 3 ... 

resources :contacts 

http_verb - action - route 
GET - index - /contacts 
GET - show - /contacts/5 
GET - new  - /contacts/new 
POST - create - /contacts/create 
GET - edit - /contacts/5/edit 
PUT - update - /contacts/5 
DELETE - destroy - /contacts/5 

Ils sont communément appelés les « 7 actions RESTful » Cependant, vous pouvez ajouter vos propres itinéraires personnalisés si nécessaire (bien que vous êtes fortement encouragé à utiliser le 7 autant que possible).

Comment ajouter des ressources/routes supplémentaires?

L'ajout d'itinéraires supplémentaires est facile. D'abord, vous voulez décider si vous travaillez avec une collection ou un membre spécifique, puis également considérer si l'action est en train de créer ou de mettre à jour quelque chose. Pour les actions de mise à jour, vous voulez utiliser PUT, créer POST, détruire, utiliser DELETE, et tout le reste est probablement un GET.

map.resources :contacts, :collection => { :new_this_month => :get }, 
         :member => { :make_featured_person => :put } 

... or in Rails 3 ... 

resources :contacts do 
    collection do 
    get 'new_this_month' 
    end 

    member do 
    put 'make_featured_person' 
    end 
end 

http_verb - action - route 
GET - new_this_month  - /contacts/new_this_month 
PUT - make_featured_person - /contacts/5/make_featured_person 

La plupart du temps les 7 actions sont assez Restful beaucoup, mais dans certaines situations, vous aurez besoin d'itinéraires personnalisés. C'est pourquoi Rails gère le cas le plus commun et vous donne la possibilité de gérer des cas uniques.

+0

Merci pour la réponse détaillée, vraiment l'apprécier! Le mettre à utiliser maintenant. La seule question est, quelle est la différence entre la collection et le membre? –

+0

Une collection est un groupe de membres. Je pense de cette façon: si je veux utiliser l'identifiant (ou un identifiant unique) de la chose que je veux GET/PUT/POST/DELETE dans l'URL, je travaille avec un membre.Sinon, je travaille avec une collection. C'est pour cette raison que "new_this_month" fonctionne sur une collection, car nous ne demandons pas de contact spécifique, juste un nouveau - nous recevrons un ou plusieurs contacts. Alors que "make_featured_person" travaille sur un membre parce que nous transmettons l'identifiant spécifique (dans l'exemple 5) ... nous disons "make * THIS * un contact une personne en vedette". –

2

Les chemins de ressources simples fournissent un raccourci pour générer les routes les plus courantes trouvées dans un contrôleur, c'est créer, lire, mettre à jour et supprimer CRUD. Cela permet la personnalisation, car c'est probablement ce dont les gens auront besoin.

Pour ajouter une voie supplémentaire à une spécification de ressources:

map.resources :accounts, :collection => {:administrate => :get}, :member => {:activate => :put} 

:collection results in something like: 

/accounts/administrate 

:member likewise: 

/accounts/123/activate 

http://guides.rubyonrails.org/routing.html#restful-routing-the-rails-default

+0

merci! Quelle est la différence entre une collection et un membre? La documentation est un peu confuse sur ce front –

Questions connexes