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.
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
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
.
Dans Rails> = 4, vous pouvez accomplir cela avec:
match 'gallery_:id' => 'gallery#show', :via => [:get], :as => 'gallery_show'
match '/invoices/:id/send' => 'invoices#send_invoice', :as => :some_name
Pour ajouter un lien
<%= button_to "Send Invoice", some_name_path(@invoice) %>