如何在不使用rails的循环的情况下将文本字段数组数据存储在数据库中

时间:2018-02-22 17:01:26

标签: ruby-on-rails ruby ruby-on-rails-3

我是ror的新手,我正在尝试从4小时内存储像这样的textfields数组形式的数据

<input type="text" name="custom_field[names][]" class="form-control full-width" placeholder =  "Name">

<input type="text" name="custom_field[length_limit][]" class="form-control full-width" placeholder =  "Length Limit">

我想将名称和长度限制的数据库列中存储的数组存储起来。我不想用循环来完成这项工作。

我在控制器中执行此操作

user = CustomField.create(:name=> params[:names])

但它正在给予ERROR: null value in column "name" violates not-null constraint DETAI

params

{"names"=>["tester", "another tester"], "length_limit"=>["aaaaaa222", "aaaaaa222"]

我正在使用postgresql

我该怎么做?

1 个答案:

答案 0 :(得分:0)

params[:names]是一个数组,因此将它保存到postgres中的字符串/文本字段没有意义,这是CustomField.create(:name=> params[:names])所做的。

基本上,它扩展为CustomField.create(:name=> ["tester", "another tester"])。如果要为每个名称创建单独的CustomField记录,则可以执行以下操作:

params[:names].each do |name|
  CustomField.create(:name => name)
end


要使用相应的length_limit创建CustomField记录,您可以执行以下操作:

params[:names].zip(params[:length_limit]).each do |name, limit|
  CustomField.create(:name => name, :length_limit => limit)
end

请注意,这并未考虑namelength_limit不匹配的错误。您可能需要添加一些验证以确保存在所有必需的数据。