From 2b5894741bdbc4b7e8ba7764eabbcfe33123dbfc Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Mon, 29 May 2006 00:05:13 +0000 Subject: Expanded :method option in FormTagHelper#form_tag, FormHelper#form_for, PrototypeHelper#remote_form_for, PrototypeHelper#remote_form_tag, and PrototypeHelper#link_to_remote to allow for verbs other than GET and POST by automatically creating a hidden form field named _method, which will simulate the other verbs over post [DHH] git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@4375 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- actionpack/lib/action_view/helpers/javascripts/prototype.js | 6 ++++++ actionpack/lib/action_view/helpers/prototype_helper.rb | 8 +++++++- 2 files changed, 13 insertions(+), 1 deletion(-) (limited to 'actionpack/lib/action_view') diff --git a/actionpack/lib/action_view/helpers/javascripts/prototype.js b/actionpack/lib/action_view/helpers/javascripts/prototype.js index 0caf9cd7f0..5ba3a30218 100644 --- a/actionpack/lib/action_view/helpers/javascripts/prototype.js +++ b/actionpack/lib/action_view/helpers/javascripts/prototype.js @@ -669,6 +669,12 @@ Ajax.Request.prototype = Object.extend(new Ajax.Base(), { var parameters = this.options.parameters || ''; if (parameters.length > 0) parameters += '&_='; + /* Simulate other verbs over post */ + if (this.options.method != 'get' && this.options.method != 'post') { + parameters += (parameters.length > 0 ? '&' : '') + '_method=' + this.options.method + this.options.method = 'post' + } + try { this.url = url; if (this.options.method == 'get' && parameters.length > 0) diff --git a/actionpack/lib/action_view/helpers/prototype_helper.rb b/actionpack/lib/action_view/helpers/prototype_helper.rb index bf32dd9f49..4c593a40f2 100644 --- a/actionpack/lib/action_view/helpers/prototype_helper.rb +++ b/actionpack/lib/action_view/helpers/prototype_helper.rb @@ -39,7 +39,7 @@ module ActionView # XMLHttpRequest. The result of that request can then be inserted into a # DOM object whose id can be specified with options[:update]. # Usually, the result would be a partial prepared by the controller with - # either render_partial or render_partial_collection. + # render :partial. # # Examples: # link_to_remote "Delete this post", :update => "posts", @@ -60,6 +60,12 @@ module ActionView # influence how the target DOM element is updated. It must be one of # :before, :top, :bottom, or :after. # + # The method used is by default POST. You can also specify GET or you + # can simulate PUT or DELETE over POST. All specified with options[:method] + # + # Example: + # link_to_remote "Destroy", person_url(:id => person), :method => :delete + # # By default, these remote requests are processed asynchronous during # which various JavaScript callbacks can be triggered (for progress # indicators and the likes). All callbacks get access to the -- cgit v1.2.3