嗨,我对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
答案 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