Как уже сказал Дэвид, с вашим вкладом будет действительно трудно достичь того, что вам нужно. Поскольку это было весело, я исправил это, но я верю, что это должно быть исправлено где-то выше в вашем коде (надеюсь, вы используете Ruby 2.5+, если нет, дайте мне знать, в какой версии вы работаете).
def fix_my_data(data)
data.group_by { |x| x[:id_control_access] }
.transform_values do |v|
v.map { |h| h.slice(:input, :output) }
.group_by { |h| h.keys.first }.values.inject(:zip).map { |x,y| x.merge(y.to_h) }
end
end
Если вы передадите свой массив в эту функцию, он вернет следующее:
{1=>[{:input=>"Antena 1", :output=>"Antena 2"}, {:input=>"Antena 5"}],
2=>[{:input=>"Antena 3", :output=>"Antena 4"}]}
Что должно быть очень просто для генерации HTML, например:
<tr>
<% @data[control_access[:id_control_access]].each do |antenna| %>
<td><%= antenna[:input] %></td>
<td><%= antenna[:output] %></td>
<% end %>
</tr>
Я почти уверен, что fix_my_data
можно записать немного проще, но, как я уже говорил, исправлять данные слишком поздно.