Я сделал нечто подобное при получении данных с устройства iOS.Но если я понимаю, что вы хотите и как выглядят ваши модели, чтобы заставить работать вложенные атрибуты, вы не хотите, чтобы это выглядело так:
{ "photos_attributes" => { "0" => <image1>, "1" => <image2>, ... }
Вы хотите, чтобы это выглядело так:
{ "photos_attributes" => [ <image1>, <image2>, ... ] }
И чтобы сделать это, все, что вам нужно сделать, это:
params["gallery"]["photos_attributes"] = params["gallery"]["photos_attributes"]["0"]["image"]
Теперь, если я неправильно понял, что вам нужно, чтобы получить то, что вы просили за то, что выможет работать (я не пользуюсь reduce
aka inject
), или вы можете использовать tap:
i = 0
params["gallery"]["photos_attributes"] = {}.tap do |hash|
params["gallery"]["photos_attributes"]["0"]["image"].each do |image|
hash[i.to_s] = image
i = i + 1
end
end
Не намного лучше IMO.