ruby-on-rails - hashes - ruby each hash key value
Ruby on Rails: hash.each{} problemas (3)
Aquí está mi código:
records_hash = records[:id].inject({}) { |result,h|
if result.has_key?(h)
result[h] += 1
else
result[h] = 1
end
result
}
@test2 = records_hash.each{|key,value| puts "#{key} is #{value}"}
Mi salida debería verse así:
bozo is 3
bubba is 4
bonker is 5
Pero aparece en la página ( <%= @test2 %>
) así:
bozo3bubba4bonker5
He intentado con .each_key y .each-value con bloques similares y todos devuelven la misma cadena de arriba. Ejecuto el mismo código en IRB y funciona como se esperaba.
¿Qué estoy haciendo mal?
El problema es que devuelve nulos.
Lo que quieres hacer es:
@test2 = ""
@test2 = records_hash.each { |k,v| s<< "#{k} is #{v}" }
o algo similar.
Editar: Lo que está asignando a @test2
en su ejemplo de código es el valor de .each
bloque .each
.
Podrías simplemente poner eso en tu vista, en lugar de asignarlo a una variable.
Tu problema es que estás usando cada método para construir tu cadena. Lo que quieres es el método del mapa. cada método devuelve el hash y el mapa devuelve el valor del bloque.
Quieres algo como esto:
@test2 = records_hash.map { |k,v| "#{k} is #{v}" }
Además, no debería crear código de vista como este, a menos que sea una cadena simple. Su ejemplo implica que desea que cada elemento único en cada línea. Entonces su vista debería ser así:
<% @records_hash.each do |k,v| %>
<%= "#{k} is #{v}" %>
<% end -%>
Si su vista es HTML, también querrá un separador entre cada línea:
<% @records_hash.each do |k,v| %>
<%= "#{k} is #{v}" %><br/>
<% end -%>
o
<ul>
<% @records_hash.each do |k,v| %>
<li><%= "#{k} is #{v}" %></li>
<% end -%>
</ul>