2012-05-31 7 views
5

Próbuję napisać dwa linki do odrzucenia & zatwierdzić działania, , ale nie wiem jak napisać poprawną trasęszyny 3.2, jak napisać trasę dla HTTP czasownika umieścić i używać go w link_to?

mój route.rb

put 'approve_class_room/:id(.:format)', :to => 'class_room_member_ships#approve' 
put 'reject_class_room/:id(.:format)', :to => 'class_room_member_ships#reject' 

ale w trasach po kasę , Otrzymuję:

PUT /approve_class_room/:id(.:format) class_room_member_ships#approve 
PUT /reject_class_room/:id(.:format) class_room_member_ships#reject 

, więc jaki byłby właściwy link do ścieżki?

mój link jest

= link_to 'approve', approve_class_room_path 

przyzwyczajenie”praca, otrzymuję:

undefined local variable or method `approve_class_room_path' 

PS: Staram się mieć link_to działa za pomocą AJAX, aby zrobić to zatwierdzić na tej samej stronie , AM Czy jestem na dobrej drodze? jaka byłaby ścieżka do łącza?

Masz pomysł?

Odpowiedz

6

Po pierwsze, aby usunąć błąd trzeba użyć named routes:

put 'approve_class_room/:id(.:format)', :to => 'class_room_member_ships#approve', 
             :as => :approve_class_room 
put 'reject_class_room/:id(.:format)', :to => 'class_room_member_ships#reject', 
             :as => :reject_class_room 

Następnie, aby wykonać żądania PUT, trzeba włączyć opcję :method w wywołaniu link_to:

link_to 'approve', approve_class_room_path, :method => :put 
link_to 'reject', reject_class_room_path, :method => :put 

Jeśli otrzymujesz 404, który powoduje żądanie GET zamiast żądania PUT, to dlatego, że :method => :put opcja oparta na JavaScript. Musisz się upewnić, że jquery-rails jest poprawnie zintegrowany z Twoją aplikacją.

+0

dzięki Matt, czy możesz wyjaśnić część (.: format) na nazwanych trasach? – simo

+0

Ponieważ '(.: Format)' znajduje się w nawiasach, jest to opcjonalna część ciągu adresu URL dla trasy. "." jest statyczny, a ": format" jest właściwą opcją. Railsy domyślnie formatują się jako "html", ale to pozwala ci uzyskać dostęp do 'approve_class_room/5.xml',' approve_class_room/5.json', itd. Zakładając, że skonfigurowałeś swoją aplikację Rails do obsługi tego typu formatów. Sprawdź [response_to] (http://apidock.com/rails/ActionController/MimeResponds/respond_to) i [reply_with] (http://apidock.com/rails/ActionController/MimeResponds/respond_with) jeśli jesteś zainteresowany obsługą wiele formatów. –

+0

dzięki Matt, sprawdzę, czy – simo

1

To nie może usunąć ten błąd, ale ponieważ wniosek jest put, trzeba określić, że w link_to:

= link_to 'approve', approve_class_room_path, :method => :put 

dla trasy, myślę, dodając to może sprawić, że błąd odejść:

put 'approve_class_room/:id(.:format)', :to => 'class_room_member_ships#approve', :as => :approve_class_room 
+1

dziękuję, Bill, chociaż twoja odpowiedź jest poprawna, nie widziałem części ": as => approve_class_room" w pierwszej kolejności, tylko gdy przewijałem pasek przewijania, chciałbym zaznaczyć dwie odpowiedzi jako prawidłowe , więc tutaj jest głosowanie w górę :-) – simo

Powiązane problemy