2012-05-31 90 views
5

我想寫兩個環節的拒絕&批准行動, 但是,我不知道怎麼寫了正確的路線,rails 3.2,如何爲HTTP動詞放置路由,並在link_to中使用它?

我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' 

但是,在耙路線,我得到:

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

那麼,什麼是正確的link_to的路徑?

我的鏈接是

= link_to 'approve', approve_class_room_path 

它不會」工作,我得到:

undefined local variable or method `approve_class_room_path' 

PS:我想擁有的link_to工程,並使用AJAX,這樣做在同一個頁面的批准, AM我在正確的方式? link_to路徑是什麼?

有什麼想法嗎?

回答

6

首先要清除錯誤,你需要使用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 

然後,執行PUT請求,您需要在您的link_to調用:method選項:

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

如果你得到一個404,結果在一個GET請求,而不是一個PUT請求,這是因爲:method => :put選項依賴於JavaScript。您需要確保jquery-rails已正確集成到您的應用中。

+0

謝謝馬特,你能解釋指定路線中的(。:格式)部分嗎? – simo

+0

因爲'(。:format)'在括號內,所以它是路由URL字符串的一個可選部分。 「。」是靜態的,而「:format」是實際的選項。 Rails的默認格式是「HTML」,但是這允許您訪問'approve_class_room/5.xml','approve_class_room/5.json'等假設你已經配置你的Rails應用程序來處理這些類型的格式。退房[respond_to代碼(http://apidock.com/rails/ActionController/MimeResponds/respond_to)和[respond_with(http://apidock.com/rails/ActionController/MimeResponds/respond_with)如果你有興趣在處理多種格式。 –

+0

感謝馬特,我將檢查 – simo

1

這可能不是清除錯誤,但因爲該請求是看跌期權,你需要指定在link_to

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

對於路線,我認爲加上這將使錯誤消失:

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

謝謝比爾,雖然你的回答是正確的,但是我第一次沒有看到「:as =>:approve_class_room」部分,只有當我滾動滾動條時,我希望我可以將兩個答案標記爲正確的,所以這裏是一個投票:-) – simo