2012-05-31 94 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