2014-01-10 2 views
7

がどのようにレールでform_tagに置くために、フォーム内のメソッドを設定する?私はこのようなform_tagていますform_tagをレールに入れる方法を設定するには?

<%= form_tag(url, :method => :put, :multipart => true, :class =>"form-horizontal") do %> 
...... 
<% end %> 

をしかし、私は、要素を検査した場合、フォームがメソッドを持っていないが、それでも「ポスト」を「置きますか」?

<form accept-charset="UTF-8" action="/admin/stores/1/information/social_update" class="form-horizontal" enctype="multipart/form-data" method="post"> 
.... 
</form> 

なぜですか? the docsによると

+0

http://stackoverflow.com/questions/165779/are-the-put-delete-head-etc-methods-available-in-most-web-browsers – depa

+0

ここでの混乱は何ですか? – zeantsoi

答えて

15

「パッチ」、「削除」、「置く」、または別の動詞を使用する場合は、名前の_methodを持つ隠し入力はポストの上に動詞をシミュレートするために追加されます。

したがって、次のコードが出力次のマークアップ:

form_tag('/posts/1', method: :put) 
#=> <form action="/posts/1" method="post"> ... <input name="_method" type="hidden" value="put" /> ... 

これは基本的にブラウザ間PUTプロトコルを実装する後方互換性のある方法です。フォームのサブミット方法はPOSTですが、隠れフォーム入力のため、Railsは希望するサブミット方法がPUTであることを理解しています。

+0

まだ要素を調べるとメソッドポストを取得する??? – tardjo

+4

私の答えは実際に読んだことがありますか?デフォルトでは、Railsは、メソッドが 'PUT'サブミッションであることを指定する隠し入力を追加します。したがって、 'form'メソッド属性が' POST'である間に、Railsは提出を 'PUT'のように処理します。これは 'GET'と' POST'メソッド以外の何もサポートしていない古いバージョンのHTMLに対応するためです。 – zeantsoi

+0

ありがとう、私の問題を修正します – tardjo

0

Railsフレームワークは、アプリケーションのRESTfulな設計を奨励します。つまり、 "GET"と "POST"以外にたくさんの "PATCH"と "DELETE"リクエストが発生します。しかし、フォームを送信する際には、「GET」や「POST」以外の方法はサポートしていません。

したがって、PUTの代わりにPOSTを使用しても問題ありません。

Reference

+0

私はメソッド "get"を使用してform_tag、メソッドは "get"に変更されますが、私はメソッド "put"を使用する場合...私はまだメソッドの投稿を取得?? – tardjo

+0

はい。 msgstr "" "Railsは、" _method "という名前の隠し入力でPOST上の他のメソッドをエミュレートすることで、この問題を回避します。この場合: "PUT" – delphaber

-1

トリックを行うと、あなたが要素を検査するとき取得表示されるはずです

:method => 'get' 

を入力してみてください。

関連する問題