2013-05-22 3 views
29

リソースルートを持つinvoices_controllerがあります。リソースルートにカスタムルートを追加する方法

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

は今、私はinvoices/:id/sendとしてカスタムルートを追加するにはどうすればよい、請求書へのセンド機能を追加したいinvoices#send_invoiceを言うために、どのように私はビューでそれにリンクするリクエストをディスパッチすることを次のように。

従来のレール方法は何ですか?ありがとう。

答えて

33

あなたのルートでこれを追加します。あなたの意見ではその後

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 %> 
をもちろん

、あなたがリンクにRailsの> = 4では

<%= button_to "Send Invoice", some_name_path(@invoice) %> 
+0

をありがとう!しかし、コントローラでsendメソッドを使うと、このような引数エラーが出ます。InvoicesController#引数の数が間違っています(2に対して0を返します)。いくつかの内部関数には、sendキーワードが使われていると思います。面白い、すべての "send"を "bend"に変更すると、実際に電子メールが送信されました。今、私は請求書を送信するための新しい動詞を見つけなければなりません。 –

+0

@ SathishManoharああああ!私はそれについて考えなかった!はい、 'send'はRuby http://ruby-doc.org/core-2.0/Object.html#method-i-sendのメソッドです。たぶん 'send'の代わりに' deliver'を使うかもしれません(私の2セント) – Damien

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

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

それはあなたのinvoices_controllersendアクションに移動します。

0
match '/invoices/:id/send' => 'invoices#send_invoice', :as => :some_name 

に縛られていない、あなたがそれを達成することができます

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

0

を追加するにはPOSTメソッド

関連する問題