2010-10-11 4 views
0

Привет, я очень новичок в рельсах и нуждаюсь в некоторой помощи при итерации через вложенные массивы. Я пытаюсь понять, как делать массовые вставки для каждого значения, которое отличается между маркой, моделью и цветом автомобилей.Rails - Итерация через вложенные массивы

В Титулах, которые проход являются:

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

Так что с этим Params прошел, я хотел бы иметь 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

Ваш метод вставки выглядит хорошо, но я добавил SQL дезинфекцию к входам. Стандартные вкладыши для рельсов будут дезинфицировать вас, но при создании собственных запросов вы захотите дезинфицировать входные данные таким образом, чтобы защитить себя от атак с использованием 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 
+0

спасибо Джереми, я дам, что попробовать. Имеет смысл использовать индекс во время итерации. Кроме того, thx для предложения санитарии. – oprogfrogo

+0

Джереми, не могли бы вы так помочь в подобной проблеме. Я понял, как все еще использовать form_for и вложенные массивы для отправки на контроллер. Но я не уверен, как делать с ней массовые вставки. У меня есть следующие параметры: «car» => {«make» => «Honda», «color» => [«0», «черный», «0», «белый», «0», «красный», ], «model» => «Accord», «tinted» => «yes»}. Есть ли в любом случае, чтобы активная модель делала 3 вставки сразу, видя, что в параметрах есть 3 'цвета'? – oprogfrogo

Смежные вопросы