Rails は隠し属性を使ってこれを行います。これを理解する最も簡単な方法は、新しい Rails アプリケーションを作成し、足場を生成して、ブラウザーで HTML を確認することです。
これを試して:
rails jp
cd jp
./script/generate scaffold RequestBuilder name:string
rake db:migrate
./script/server
次に、http://localhost:3000/request_buildersに移動し、[新規] をクリックして HTML を確認します。次のように表示されます。
<form action="/request_builders" class="new_request_builder"
id="new_request_builder" method="post">
<div style="margin:0;padding:0">
<input name="authenticity_token" type="hidden" value="e76..." />
</div>
これは作成、方法は POST です。名前を入力して保存し、編集します。
<form action="/request_builders/1" class="edit_request_builder"
id="edit_request_builder_1" method="post">
<div style="margin:0;padding:0">
<input name="_method" type="hidden" value="put" />
<input name="authenticity_token" type="hidden" value="e76..." />
</div>
もちろんフォームは POST で送信されますが、Rails には PUT リクエストをシミュレートする隠しフィールドがありました。削除も同様ですが、scaffold は Javascript を少し使ってそれを行います:
var m = document.createElement('input');
m.setAttribute('type', 'hidden');
m.setAttribute('name', '_method');
m.setAttribute('value', 'delete');
これを別のフロントエンドで動作させるには、次の両方が必要です。
- /request_builders/1 などの同じスタイルの URL を使用する (RESTful URL)
- 隠しフィールドを含める (Rails トリック)