1

単一のモデル (タスク) と単一の属性 (名前) を持つ単純なアプリがあります。

アプリ/ビュー/タスク/_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)

入力する名前ごとに個別のタスク/名前が必要です。

4

1 に答える 1

0

Rails 4 の強力なパラメーター機能では、コントローラー内のパラメーターをホワイトリストに登録する必要があります。また、こちらの回答によると、パラメーターの配列は、さらに微調整しないとホワイトリストに登録できないため、必要です

params.require(:task).permit(name: [])
于 2013-07-25T16:02:51.247 に答える