本质上,没关系 - 您绝对可以从Rails中的窗体发送PUT
请求。
但是,如果您在routes.rb
文件中指定一条路由为get
请求,它将只会使用HTTP GET动词匹配它。
看看输出从rake routes
:
Prefix Verb URI Pattern Controller#Action
api_v1_search_simple GET /api/v1/search/simple(.:format) api/v1/search#simple
new_user_session GET /auth/login(.:format) devise/sessions#new
user_session POST /auth/login(.:format) devise/sessions#create
destroy_user_session DELETE /auth/logout(.:format) devise/sessions#destroy
user_password POST /auth/password(.:format) devise/passwords#create
new_user_password GET /auth/password/new(.:format) devise/passwords#new
edit_user_password GET /auth/password/edit(.:format) devise/passwords#edit
PATCH /auth/password(.:format) devise/passwords#update
PUT /auth/password(.:format) devise/passwords#update
user_confirmation POST /auth/confirmation(.:format) devise/confirmations#create
new_user_confirmation GET /auth/confirmation/new(.:format) devise/confirmations#new
GET /auth/confirmation(.:format) devise/confirmations#show
root GET / dashboards#show
你看看它是如何列出Verb
将对阵?
如果你想发送PUT
请求,并有轨匹配一个特定的控制器和行动,那么你应该将它指定你routes.rb
文件put
请求。
您可以选择使用match
通配符来定义路由,但通常认为这是一件糟糕的事情,因为它会打开您的应用程序以供滥用。
本指南是非常有用的:http://guides.rubyonrails.org/routing.html
如果你读section 3.7,你会看到,你可以使用关键字match
与via
属性限制哪些动词路线应该对阵一起。像这样的:
match 'photos', to: 'photos#show', via: [:get, :post]
你可以使用路由这样的匹配对阵双方GET
和PUT
如果你需要它。
来源
2015-04-20 05:05:49
Jon
感谢您的回答! '但是,如果你在你的routes.rb文件中指定了一个路由作为get请求,它将只使用HTTP GET动词匹配它。“ - 这是否意味着该动作(在routes.rb中声明为”get“ )将始终用http GET完成,无论在'method:'中如何? – user938363
如果routes.rb和method中的操作不匹配,则rails路由将无法正确完成。这是我们在测试中发现的。所以在实际中,它们应该匹配。 – user938363
我认为你有点混淆事情。控制器中的“操作”可以有你喜欢的任何名称。你的情况是'export_file'。由于您使用'get'关键字定义了该路线,因此如果请求是“GET”请求,则Rails将仅匹配它。 – Jon