Rails - перебираем вложенные массивы - PullRequest
0 голосов
/ 12 октября 2010

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

Передаваемые параметры:

"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 голосов
/ 12 октября 2010

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