Rails - 迭代嵌套数组

时间:2010-10-11 21:34:26

标签: ruby-on-rails arrays nested

嗨,我对rails很新,需要一些迭代嵌套数组的帮助。我正在试图弄清楚如何为汽车的品牌,型号和颜色之间的每个值进行质量插入。

传递的参数是:

"make" => ["Honda", "Honda"],
"model" => ["Civic", "Accord"],
"color" => [{"Black", "White", "Red"}, {"Black", "White"}]

因此,通过这些参数,我想要进行5次插入。

1. Honda - Civic - Black
2. Honda - Civic - White
3. Honda - Civic - Red
4. Honda - Accord - Black
5. Honda - Accord - White

这是我到目前为止推送的构建它的插入查询。但我不确定如何根据我上面列出的内容插入5次:

def self.cars(make, model, color)
  inserts = []
    color.each do |i|
      inserts.push "('#{make}', '#{model}', '#{i}')"
     end

  Foo.connection.execute "INSERT INTO car_inventory (make, model, color) VALUES #{inserts.join(", ")}"
end

1 个答案:

答案 0 :(得分:0)

您的插入方法看起来没问题,但我已经在输入中添加了sql清理功能。标准的rails insert会为你清理,但是在构建你自己的查询时,你需要清理这样的输入,以保护自己免受sql注入攻击。

def self.cars(make, model, colors)
  inserts = []
    colors.each do |color|
      inserts.push "('#{Foo.connection.quote(make)}', '#{Foo.connection.quote(model)}', '#{Foo.connection.quote(color)}')"
     end

  Foo.connection.execute "INSERT INTO car_inventory (make, model, color) VALUES #{inserts.join(", ")}"
end

然后您的控制器应该包含如下代码:

params["make"].each_with_index |make, index|
  Foo.cars(make, params["model"][index], params["color"][index])
end