Учитывая, что у меня есть объект AR (object
) и строка (s
). s
основано на ассоциациях объекта. ie. Продукт принадлежит проходу, проход принадлежит отделу, отдел принадлежит магазину
Я хочу получить массив всех этих ассоциаций. Вот что я придумала
object = Product.last
s='aisle.department.shop'
new_array = s.split(',').each_with_object([]).with_index do |(assoc_set, array), index|
a = assoc_set.split('.')
a.each_with_index do |assoc, index|
if index == 0
array << object.send(assoc)
elsif index == 1
array << object.send(a[index - 1]).send(a[index])
elsif index == 2
array << object.send(a[index - 2]).send(a[index - 1]).send(a[index])
elsif index == 3
array << object.send(a[index - 3]).send(a[index - 2]).send(a[index - 1]).send(a[index])
end
end
end
Выводит именно то, что я хочу:
[
#<Aisle:0x00007fa001d6f800 ...>,
#<Department:0x00007fa001d44b00 ...>,
#<Shop:0x00007fa020f4bc68 ...>,
]
За исключением кода, который не является динамическим c. Как вы можете видеть, он поднимается только на 3 уровня. Как я могу рефакторинг это?