Вы можете попробовать вручную присоединить default_proc
к вашему @rws
внутри контроллера:
@rws = pile_of_stuff_that_produces_a_hash
@rws.default_proc = proc do |h,k|
x = { }
x.default_proc = @rws.default_proc
h[k] = x
x
end
Обратите внимание, что default_proc
является "унаследованным" (x.default_proc = @rws.default_proc
) недавно созданными хешами, чтобы вы получали новые хеши полностью вниз.Тогда вы можете сделать это:
@rws[:where][:is][:pancakes][:house?]
И это сработает.Недостатком является то, что вы всегда будете получать пустой хеш, когда просите что-то, чего не было, поэтому вам, возможно, придется звонить emtpy?
в тех местах, где вы обычно звоните nil?
.Таким образом, у вас будет что-то вроде этого:
<% dates.each do date %>
<% v = @rws[sec][date] %>
<td><%= v.is_a?(Hash) && v.empty?? 0 : v %></td>
<% end %>
В зависимости от ваших конкретных обстоятельств, вы можете урезать v.is_a?(Hash) && v.empty?
до чего-то более приятного;например, если @rws
должны быть числами до конца, то v.is_a?(Hash)
будет достаточно.
Этот default_proc
подход может быть слишком умным для ваших конкретных нужд, но стоит упомянуть общую технику.