Будет работать следующее:
<% (1..23).each do |n| %>
<td><%= forecast.public_send("day#{n}") %></td>
<% end %>
Итак, вы перебираете диапазон от 1 до 23, отправляя метод day#{n}
в forecast
для каждого номера, используя public_send
.
Что касается второй части вашего вопроса, чтобы отобразить только td
, если элемент присутствует, вы можете использовать:
<% (1..23).each do |n| %>
<% if (forecast_for_day = forecast.public_send("day#{n}")).present? %>
<td><%= forecast_for_day %></td>
<% end %>
<% end %>
Это присваивает результатлокальная переменная во время проверки и используется для отображения результата, если он присутствует - избавляет от необходимости вызывать метод дважды.
Надеюсь, это поможет - дайте мне знать, если у вас есть какие-либо вопросы.