Печать хеша на html таблицы - Ruby on rails - PullRequest
0 голосов
/ 10 ноября 2018

У меня есть переменная экземпляра @report_antennas_control_access с этими данными [{:id_control_access=>1, :input=>"Antena 1"}, {:id_control_access=>1, :output=>"Antena 2"}, {:id_control_access=>1, :input=>"Antena 5"}, {:id_control_access=>2, :input=>"Antena 3"}, {:id_control_access=>2, :output=>"Antena 4"}] и я хочу напечатать его в своей таблице .html, но при этом я делаю это так, как мне не нужно

Я делаю это так:

                  <tbody>
                    <% @report_antennas_control_access.each do | antennas | %>
                      <tr>
                        <% if control_access[:id_control_access] == antennas[:id_control_access] %>
                          <td><%= antennas[:input] %></td>
                          <td><%= antennas[:output] %></td>
                        <% end %>
                      </tr>
                    <% end %>
                  </tbody>

Но он печатает это мне так, как я не хочу:

enter image description here

Мне нужно распечатать эти данные (пример):

enter image description here

Ответы [ 2 ]

0 голосов
/ 10 ноября 2018

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

0 голосов
/ 10 ноября 2018

Проблема в том, что вы перебираете каждый хеш и пытаетесь получить доступ к данным в хэше до или после. Возьмите первый хеш, например: {:id_control_access=>1, :input=>"Antena 1"}. Вы называете antennas[:input] на нем, поэтому он отображает «Антенна 1». Но затем вы вызываете antennas[:output], и в текущем хеше нет ключа output, поэтому он возвращает nil и вызывает пустую ячейку соответствующей таблицы.

Вам следует по возможности обновить структуру ваших хэшей, чтобы они выглядели как {:id_control_access=>1, :input=>"Antena 1", :output=>"Antena 2"}. Мне кажется, это более логично и решит проблему с вашим столом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...