Ruby: adding a new element to each array in an array, such that the new element is the downcased version of an existing element -
if
@users = user.all.group_by(&:iso).map{|k,v| [k, v.count]}
returns
[["gb", 1], ["gi", 3], ["bd", 1]]
why can't this
@users = user.all.group_by(&:iso).map{|k,v| [k, v.count, k.downcase]}
to
[["gb", 1, "gb"], ["gi", 3, "gi"], ["bd", 1, "bd"]]
i getting error
undefined method `downcase' nil:nilclass
how this.
if
@user_json = user.all.group_by(&:iso).map{|k,v| [k, v.count, k.inspect]}
i
[["gb", 1, "\"gb\""], ["gi", 3, "\"gi\""], ["bd", 1, "\"bd\""]
and
@user_json = user.all.group_by(&:iso).map{|k,v| [k, v.count, k.inspect.downcase]} [["gb", 1, "\"gb\""], ["gi", 3, "\"gi\""], ["bd", 1, "\"bd\""]
v. confused
for more details - works (but if wrong , can't explain why)
i trying build json array structure:
[{"code":"gb","value":1,"flag":"gb"},{"code":"gi","value":3,"flag":"gi"},{"code":"bd","value":1,"flag":"bd"}]
my controller code
def global_chart @user_json = user.all.group_by(&:iso).map{|k,v| [k, v.count, k.to_s.downcase]}.map {|c, v | ["code" => c, "value" => v, "flag" => c.to_s.downcase]}.flatten.to_json render 'users/charts/global' end
this works ( @user_json variable has right structure) can't explain behaviour above....
your code
@users = user.all.group_by(&:iso).map{ |k,v| [k, v.count] }
is absolutely valid , output shows have got 3 iso groups. then
@users = user.all.group_by(&:iso).map{ |k,v| [k, v.count, k.downcase] }
is absolutely valid code well. error undefined method 'downcase' nil:nilclass
tells 1 of iso values nil
. not true first example output.
after that, third snippet
user.all.group_by(&:iso).map{ |k,v| [k, v.count, k.inspect.downcase] }
which again correct, returns same output first 1 (i mean same sample of iso).
so somewhere in code bug. believe close provided piece of code. show whole controller's code see maybe problem on surface.
Comments
Post a Comment