単一のモデル (タスク) と単一の属性 (名前) を持つ単純なアプリがあります。
アプリ/ビュー/タスク/_form.html.erb
<%= form_tag :action => 'create' %>
<div id="dynamicInput">
Task Name <input type="text" name="task[name][]">
</div>
<input type="button" value="Add New Tag" onClick="addInput('dynamicInput');">
<%= submit_tag "Create"%>
アプリ/資産/javascripts/application.js
var counter = 1;
function addInput(divName){
var newdiv = document.createElement('div');
newdiv.innerHTML = "Task Name <input type='text' name='task[name][]'>";
document.getElementById(divName).appendChild(newdiv);
counter++;
}
上記のコードにより、好きなだけフィールドを追加できます。1 つの名前を入力することはできますが、2 つのフィールドを動的に追加すると、パラメータは次のようになります...
Started POST "/tasks" for 127.0.0.1 at 2013-07-25 12:36:57 -0400
Processing by TasksController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"PnTQnxM3GFRtqkXi09jLH8UJBiaRCI0chSZ716cVWJ0=", "task"=>{"name"=>["name1", "name2"]}, "commit"=>"Create"}
(0.1ms) begin transaction
SQL (5.6ms) INSERT INTO "tasks" ("created_at", "name", "updated_at") VALUES (?, ?, ?) [["created_at", Thu, 25 Jul 2013 16:36:57 UTC +00:00], ["name", ["name1", "name2"]], ["updated_at", Thu, 25 Jul 2013 16:36:57 UTC +00:00]]
(153.1ms) commit transaction
Redirected to http://localhost:3000/tasks/1
Completed 302 Found in 165ms (ActiveRecord: 158.7ms)
入力する名前ごとに個別のタスク/名前が必要です。