web-dev-qa-db-fra.com

Comment ajouter des itinéraires personnalisés à l'itinéraire des ressources

J'ai un invoices_controller qui a des routes de ressources. Comme suivant:

resources :invoices do
  resources :items, only: [:create, :destroy, :update]
end

Maintenant, je veux ajouter une fonctionnalité d'envoi à la facture, comment ajouter un itinéraire personnalisé en tant que invoices/:id/send qui envoie la demande pour dire invoices#send_invoice et comment dois-je y accéder dans les vues.

Quelle est la méthode conventionnelle Rails pour le faire. Merci.

36
Sathish Manohar

Ajoutez ceci dans vos itinéraires:

resources :invoices do
  post :send, on: :member
end

Ou

resources :invoices do
  member do
    post :send
  end
end

Ensuite, selon vous:

<%= button_to "Send Invoice", send_invoice_path(@invoice) %>

Ou

<%= link_to "Send Invoice", send_invoice_path(@invoice), method: :post %>

Bien sûr, vous n'êtes pas lié à la méthode POST

41
Damien
resources :invoices do
  resources :items, only: [:create, :destroy, :update]
  get 'send', on: :member
end

<%= link_to 'Send', send_invoice_path(@invoice) %>

Il ira à l'action send de votre invoices_controller.

2
Arjan

Dans Rails> = 4, vous pouvez accomplir cela avec:

match 'gallery_:id' => 'gallery#show', :via => [:get], :as => 'gallery_show'

1
W.M.
match '/invoices/:id/send' => 'invoices#send_invoice', :as => :some_name

Pour ajouter un lien

<%= button_to "Send Invoice", some_name_path(@invoice) %>
1
Salil