Ответ 1
Как насчет этого?
letters = ('A'..'Z').to_a
letters.shift #=> 'A'
letters.shift #=> 'B'
Вам понравится следующее:)
letter = '@'
letter.next! #=> "A"
Отметьте '@ABCD'.codepoints.to_a
, чтобы увидеть волшебство.
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
Прохладный материал. Так что это работает. Он циклически проходит через do loop
и увеличивает букву. Проблема в том, что она начинается с B. Я попытался использовать только letter
на картинке, а затем в конце с помощью letter.next!
и даже letter = letter.next
, но gmaps вызывает у меня ошибку.
Есть ли способ назначить что-то помимо 'A' на letter
?
Как насчет этого?
letters = ('A'..'Z').to_a
letters.shift #=> 'A'
letters.shift #=> 'B'
Вам понравится следующее:)
letter = '@'
letter.next! #=> "A"
Отметьте '@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"
в этом смысле:
'@'.next == 'A'
#=> true
но я сильно не рекомендую использовать черную магию. Используйте что-то вроде подхода @nicooga в реальном коде.