2013-05-22 13 views
29

Mam invoices_controller, który ma trasy zasobów. Jak następuje:Jak dodawać trasy niestandardowe do trasy zasobów

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

Teraz chcę dodać funkcjonalność wyślij do faktury, Jak mogę dodać niestandardową trasę jako invoices/:id/send tego wysłania żądania do powiedzenia invoices#send_invoice i jak należy połączyć z nim w poglądach.

Co to jest konwencjonalna metoda szynowa. Dzięki.

Odpowiedz

33

Dodaj ten w swoich tras:

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

Or

resources :invoices do 
    member do 
    post :send 
    end 
end 

Następnie w widokach:

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

Albo

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

Oczywiście, nie są związane z metodą POST

+0

Dzięki! Był jednak jeden problem, gdy używam metody send w kontrolerze, otrzymuję błąd argumentu podobny do tego, że argument 'ArgumentError in InvoicesController # pokazuje niepoprawną liczbę argumentów (2 dla 0)' Domyślam się, że szyny używają słowa kluczowego send dla niektórych wewnętrznych elementów. Zabawne, zmieniając wszystkie "wyślij" na "zginąć" faktycznie wysłał e-maile, Teraz myślę, że muszę wymyślić nowy czasownik do wysyłania faktur. –

+0

@SathishManohar ah ah! Nie myślałem o tym! Tak, 'send' jest metodą w Ruby http://ruby-doc.org/core-2.0/Object.html#method-i-send. Może używaj słowa "wyślij" zamiast "wyślij" (moje 2 centy) – Damien

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

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

To pójdzie na działanie Twojego invoices_controllersend.

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

Aby dodać link

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

W Rails> = 4, można tego dokonać z:

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