Просто используйте строковые ключи, если можете. Все примеры документации используют строковые ключи. Хотя это явно не упоминается, насколько я вижу, другие ключи не поддерживаются.
Ключевые аргументы передаются непосредственно в реализацию кеша, поэтому различные разновидности кеширования могут не совпадать по поводу того, принимают ли они что-либо кроме строк.
Поскольку кэши являются внешними, за исключением кэша в памяти, я не уверен, что вспомогательные символы были бы полезны, кроме предотвращения случаев, подобных вашему. Ключ на самом деле будет записан в какой-нибудь вывод (он не только внутренний для вашего приложения Ruby), поэтому концептуально ключ должен быть строкой.
Изменить в ответ на комментарий: Да, конечно, в этом случае вполне возможно и вполне разумно создать патч обезьяны, чтобы обойти необходимость изменения всех вызовов. Что вы предлагаете, так это (скопировано в ответ для удобства чтения):
class MemCache
def get_server_for_key_with_symbols(key, options = {})
key = key.to_s if key.is_a? Symbol
get_server_for_key_without_symbols(key, options)
end
alias_method_chain :get_server_for_key, :symbols
end
Я бы также подумал о том, чтобы просто выполнить поиск и замену всего проекта для \.fetch(:\w+)
и заменить его на \.fetch("$1")
(при необходимости повторите для read
и write
). Вероятно, это должно охватывать 95% всех случаев, и последующий запуск вашего набора тестов должен перехватить остальные ошибки.
В целом: Хотя документация по Rails в наши дни довольно хороша, к сожалению, многие предположения все еще неявны. Как правило, рекомендуется внимательно изучить примеры, приведенные в документации, и использовать тот же стиль. Документированные примеры всегда показывают, как должна была использоваться платформа.