У меня есть таблица category_aliases
, в которой есть столбец aliase
(тип массива) и столбец category_id
, что указывает на таблицу categories
.петля внутри петли activerecord
У меня есть products
стол, который имеет category
column.
есть categories
стол.
Я хочу просмотреть все продукты (много), которые имеют старые категории и сопоставить их с новыми категориями.
Поэтому мне нужно проверить, если какой-либо из category_aliases.aliase
(aliase
массив старых категорий) включает в себя это product
«s category
, и если да, то я хочу, чтобы отобразить его в новую категорию из categories
таблицы.
То, что я попытался это:
Product.all.each do |p|
CategoryAlias.all.each do |ca|
if ca.aliase.include? p.category
p.update_column(:category, Category.find(ca.category_id).name)
else
p.update_column(:category, 'undefined')
end
end
end
Но я, конечно, что-то отсутствует, потому что даже если я знаю, что там почти всегда должно быть совпадение, он обновляет p.category
на 'undefined'
все время.
В таких случаях, я хотел бы пойти на 'Оферте/регистратор привода development'; добавьте много команд 'puts' или' logger.info' на каждом шаге и точно укажите, где ожидаемый результат отличается от фактического. :-) –
Является ли ваш 'aliase' массив внутри базы данных или выполняется с помощью' serialize' (т. Е. Блога YAML внутри базы данных)? –
@muistooshort Я использую postgress и сохраняю массив в db ('t.text: aliase, aray: true') –