自定义操作export_file
在routes.rb中定义:
resource :payment_requests do
collection do
get :export_file
end
end
在form_tag
中,即使method: put
是export_file
,我们也可以将get
用于export_file吗?
<%= form_tag export_file_payment_requests_path(format: 'csv'), method: :put do %>
......
<%= submit_tag 'CSV' %>
<% end %>
根据http文档,使用put
方法进行get
操作似乎没问题。
答案 0 :(得分:1)
基本上,是的,没关系 - 您绝对可以从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
请求并使其与特定控制器和操作匹配,则应在put
文件中将其指定为routes.rb
请求。< / p>
您可以选择使用match
通配符来定义路由,但这通常被认为是一件坏事,因为它会打开您的应用程序以进行滥用。
本指南非常有用:http://guides.rubyonrails.org/routing.html
如果您阅读section 3.7,则会发现您可以使用match
关键字和via
属性来限制您的路线应匹配的动词。比如这个:
match 'photos', to: 'photos#show', via: [:get, :post]
如果需要,您可以使用类似的路线与GET
和PUT
进行匹配。