Dud*_*udo 12 ruby ruby-on-rails-3 gmaps4rails
def home
letter = 'A'
@markers = Location.all.to_gmaps4rails do |loc, marker|
marker.infowindow render_to_string(partial: '/locations/info',
locals: {object: loc})
marker.picture({picture: "http://chart.apis.google.com/chart?chst=d_map_pin_letter&chld=#{letter.next!}|9966FF|000000",
width: 32,
height: 32,
shadow_picture: "http://chart.apis.google.com/chart?chst=d_map_pin_shadow",
shadow_width: 110,
shadow_height: 110,
shadow_anchor: [17,36]})
marker.title "Title - #{loc.name}"
marker.sidebar render_to_string(partial: '/locations/sidebar',
locals: {object: loc})
marker.json({id: loc.id})
end
end
Run Code Online (Sandbox Code Playgroud)
酷的东西.这样可行.它循环通过do loop并递增字母.问题是,它从B开始.我尝试letter在图片中使用,然后在最后使用letter.next!,甚至letter = letter.next,但gmaps向我抛出错误.
有没有办法将"A"之外的东西分配给letter?
nic*_*oga 24
那这个呢?
letters = ('A'..'Z').to_a
letters.shift #=> 'A'
letters.shift #=> 'B'
Run Code Online (Sandbox Code Playgroud)
你会喜欢这个:)
letter = '@'
letter.next! #=> "A"
Run Code Online (Sandbox Code Playgroud)
检查'@ABCD'.codepoints.to_a看看魔术.
从技术上讲,'@'是前身'A',因为ASCII值为'@'64,值为'A'65.观察:
'A'.codepoints.first
#=> 65
'A'.codepoints.first - 1
#=> 64
('A'.codepoints.first - 1).chr
#=> "@"
('A'.codepoints.first - 1).chr.next
#=> "A"
Run Code Online (Sandbox Code Playgroud)
在这个意义上:
'@'.next == 'A'
#=> true
Run Code Online (Sandbox Code Playgroud)
但我强烈反对使用黑魔法™.在实际代码中使用@ nicooga的方法.