2010-12-11 18 views
1

Comment créer un lien à l'aide de link_to, lié à une méthode de mon contrôleur. Le lien que je veux créer quelque chose comme ceci:Impossible de créer une URL liée à une méthode dans mon contrôleur

/réunions/10/contacts/2/send_invite

La méthode send_invite est dans le contrôleur Contacts. Je ne sais pas quelle est la prochaine étape en ce qui concerne la façon de configurer le fichier de routes. J'ai essayé des ressources de nidification mais pas de chance jusqu'à présent. Aussi, quel est le lien à spécifier dans le link_to? J'ai essayé différentes combinaisons telles que send_invite_path, meeting_contact_send_invite_path, mais tout génère une erreur.

Mon fichier itinéraires ressemble à ceci:

resources :meetings do 
    resources :contacts, :only => [:send_invite], :as => :send_invite 
end 

Mais quand j'essaie d'appeler send_invite_path, cela ne fonctionne pas.

Répondre

1

expansion sur la réponse de austin. Cette imbrication dans config/routes.rb

resources :meetings do 
    resources :contacts do 
     member do 
     post :send_invite 
     end 
    end 
    end 

vous donnera ces itinéraires

send_invite_meeting_contact POST /meetings/:meeting_id/contacts/:id/send_invite(.:format) {:action=>"send_invite", :controller=>"contacts"} 
        meeting_contacts GET /meetings/:meeting_id/contacts(.:format)     {:action=>"index", :controller=>"contacts"} 
             POST /meetings/:meeting_id/contacts(.:format)     {:action=>"create", :controller=>"contacts"} 
        new_meeting_contact GET /meetings/:meeting_id/contacts/new(.:format)    {:action=>"new", :controller=>"contacts"} 
       edit_meeting_contact GET /meetings/:meeting_id/contacts/:id/edit(.:format)  {:action=>"edit", :controller=>"contacts"} 
         meeting_contact GET /meetings/:meeting_id/contacts/:id(.:format)    {:action=>"show", :controller=>"contacts"} 
             PUT /meetings/:meeting_id/contacts/:id(.:format)    {:action=>"update", :controller=>"contacts"} 
             DELETE /meetings/:meeting_id/contacts/:id(.:format)    {:action=>"destroy", :controller=>"contacts"} 
          meetings GET /meetings(.:format)          {:action=>"index", :controller=>"meetings"} 
             POST /meetings(.:format)          {:action=>"create", :controller=>"meetings"} 
          new_meeting GET /meetings/new(.:format)         {:action=>"new", :controller=>"meetings"} 
         edit_meeting GET /meetings/:id/edit(.:format)        {:action=>"edit", :controller=>"meetings"} 
           meeting GET /meetings/:id(.:format)         {:action=>"show", :controller=>"meetings"} 
             PUT /meetings/:id(.:format)         {:action=>"update", :controller=>"meetings"} 
             DELETE /meetings/:id(.:format)         {:action=>"destroy", :controller=>"meetings"} 
+0

Merci! Cela fonctionne parfaitement. – Allen

0

Vous devrez définir l'itinéraire dans votre fichier routes.rb et configurer vos itinéraires pour qu'ils soient imbriqués. En ce qui concerne le nom, vous pouvez définir cela dans votre fichier routes.rb en utilisant :as => "some_name" qui vous permettra d'utiliser link_to some_name_path.

Pour plus d'informations sur les itinéraires: http://guides.rubyonrails.org/routing.html

Plus précisément sur les ressources imbriquées: http://guides.rubyonrails.org/routing.html#nested-resources

+0

J'ai mis à jour ma question avec ce qui est dans mes itinéraires fichier – Allen