web-dev-qa-db-ja.com

リソースルートにカスタムルートを追加する方法

を持っています invoices_controllerリソースルートがあります。次のように:

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

次に、送信機能を請求書に追加します。カスタムルートをinvoices/:id/sendと言うリクエストをディスパッチするinvoices#send_invoiceおよびビューでどのようにリンクする必要があります。

従来のRailsの方法です。ありがとう。

36
Sathish Manohar

これをルートに追加します。

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

または

resources :invoices do
  member do
    post :send
  end
end

次に、あなたの意見で:

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

または

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

もちろん、あなたはPOSTメソッドに縛られていません

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

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

invoices_controllersendアクションに移動します。

2
Arjan

Rails> = 4では、次のようにして実現できます。

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

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

リンクを追加するには

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