Rails - 在路由中指定HTTP动词PUT或DELETE

5

你能否在route.rb中为特定路径指定PUT或DELETE HTTP动词?

例如:

get 'photos/show'

我尝试使用match语句来实现,如下所示:

match 'photos/show' => 'photos#show', :via => :delete

在rake路由中看起来没问题,但它不执行删除http请求。我还尝试过: match 'photos/show' => 'photos#show', :via => :random 在rake routes中显示“random”。
指南显示,你可以指定get或post,但我不知道是否可以指定put或delete。这可行吗?

put 'photos/:id(.:format)', :to => 'photos#update' 有什么问题吗? - jibiel
说实话,我没有尝试过PUT动词,但我在routes.rb中没有找到任何东西,所以我认为它可能不像DELETE那样有效。 - JohnDel
2个回答

15
put 'photos/:id(.:format)', :to => 'photos#update'
delete 'photos/:id(.:format)', :to => 'photos#destroy'
或者
resources :photos

并敲打您的应用程序目录

->

and hit your app directory with

rake routes

来吧,你甚至都没有尝试!


好的,问题就在设备范围内。我已经尝试了以下代码:devise_scope :user do delete "/logout" => "devise/sessions#destroy" end但是它没有起作用。你有什么建议吗?谢谢。 - JohnDel
你需要这个是为了什么?如果你想要自定义设备路由,可以尝试使用 devise_for :users, :path_names => { :sign_up => "signup", :sign_in => "login", :sign_out => "logout" } - jibiel
看起来你想要进行更深层次的定制。你可能需要更新你的问题,以吸引正确的人来这里。 - jibiel
我也尝试过那个方法。它会添加“/users/logout”等内容。我想要的是没有"user"前缀的。我试图问一些不同的问题,因为我之前问过 => https://dev59.com/2Goy5IYBdhLWcg3wo_gn ,但我没有得到任何答案。 - JohnDel
你是怎么知道这个不起作用的?devise_scope :user do delete "logout", :to => "devise/sessions#destroy" end<%= link_to "Sign out", '/logout', :method => :delete %>。对我来说有效。 - jibiel
它不起作用,它说“未知操作无法找到路径“/logout”的设备映射。也许你忘了在范围块内包装你的路由?例如:devise_scope:user do match“/some/route”=>“some_devise_controller”end”。重新启动服务器,你可能也会看到它。我正在使用rails 3.1.3和ruby 1.9.3。我尝试了很多事情,比如从devise.rb中更改config.sign_out_via =:delete,但它也没有起作用。 - JohnDel

3

没有任何限制阻止您直接使用put/post/delete,而不是使用match。

例如,以下方法对我有效:

get 'user/edit' => 'users#edit', :as => :edit_current_user
put 'signup' => 'users#update'

当您想要进行如下路由时(虽然不经常出现),via选项非常有用:

match 'user/show' => 'users#show', :via => [:get, :post]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接