Rails在数据库中插入动态字段

Rails insert dynamic fields into the database

本文关键字:动态 字段 插入 数据库 Rails      更新时间:2023-09-26

我有一个简单的应用程序,它只有一个模型(任务)和一个属性(名称)。

app/views/tasks/_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"%>

app/assets/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++;
}

上面的代码允许我添加任意数量的字段。我可以输入一个名称,但如果我动态添加2个字段,以下是我的params的样子。。。

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)

我希望为输入的每个名称指定一个单独的任务/名称。

在Rails4中,强参数功能要求您在控制器内将参数列入白名单。此外,根据这里的答案,如果不进一步调整,一组参数就不能被列入白名单,所以你需要

params.require(:task).permit(name: [])