rails hashes example create array ruby-on-rails ruby hash

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>