Существует разница между одинарными ''и двойными кавычками ""в Ruby с точки зрения того, что должно быть оценено как строка.
Вначале я хотел бы уточнить, что в буквальной форме строки все, что находится между одинарными или двойными кавычками, оценивается как строковый объект, который является экземпляром класса Ruby String.
Следовательно, 'stackoverflow'и "stackoverflow"оба будут оценивать экземпляры класса String без разницы вообще .
Различия
Существенное различие между двумя буквальными формами строк (одинарные или двойные кавычки) заключается в том, что двойные кавычки допускают escape-последовательности, а одинарные кавычки - нет!
Строковый литерал, созданный одинарными кавычками, не поддерживает интерполяцию строк и не экранирует последовательности.
Хороший пример:
"\n" # will be interpreted as a new line
в то время как
'\n' # will display the actual escape sequence to the user
Интерполяция с одинарными кавычками не работает вообще:
'#{Time.now}'
=> "\#{Time.now}" # which is not what you want..
Лучшая практика
Поскольку большинство Ruby Linters предлагают использовать литералы одинарных кавычек для ваших строк и использовать двойные в случае интерполяции / экранирования последовательностей.