Как получить доступ к данным конфигурации приложения Rails с помощью интерполяции строк

#ruby-on-rails #ruby #ruby-on-rails-5

Вопрос:

У меня есть учетные данные сторонних разработчиков, установленные в файле config/application.rb, такие как ключ, UUID и другие значения.

 config.username = "username"
config.uuid = "uuid"
config.yyy = "yyy"
 

Для их извлечения мне нужно написать несколько строк, чтобы получить данные, которые

Rails.application.config.ключ

Rails.application.config.UUID

Rails.application.config.гггг

Вместо того, чтобы использовать вышесказанное, я определил массив с набором элементов, проходящих через него, и получаю значение конфигурации. Но я не могу получить значение конфигурации, так как выборка через переменную не позволяет. Дайте мне знать, если появится какая-либо альтернатива

 arr = ["key", "uuid", "vv"]
arr.each do |v|
  # Fetching the config value from application config
  Rails.application.config.v 
  # Or
  Rails.application.config."#{v}"
end
 

Получение сообщения об ошибке — неопределенный метод «v» для #Rails::Приложение::Конфигурация:0x0000000152e4f360 (или) Синтаксическая ошибка ((irb):1919: синтаксическая ошибка, неожиданный tSTRING_BEG) …ass; Rails.application.config.»#{v}»

Ответ №1:

Другой способ, которым вы можете подойти к своей проблеме, — это сохранить связанную конфигурацию в хэше:

 config.third_party_stuff = { 
  username: 'username',
  uuid:     'uuid',
  yyy:      'yyy'
}
 

Тогда вы можете сделать, можете вытащить это все вместе:

 third_party_config = Rails.application.config.third_party_stuff

puts "Hey #{third_party_config[:username]}, your uuid is #{third_party_config[:uuid]}"
 

Если вы храните конфиденциальную информацию, взгляните на учетные данные rails. Вы можете добавить соответствующую информацию под ключом в файле учетных данных и получить вышеуказанные преимущества, сохраняя при этом свои данные в безопасности.

Ответ №2:

Там, где другого механизма не существует, вы можете использовать Object#send или Object#public_send вызывать имя динамического метода. Например:

 Rails.configuration.public_send(v)
 

Если существует другой механизм, такой как запись в квадратных скобках, slice метод или получение или преобразование в хэш, это может быть сочтено предпочтительным. Я не вижу очевидного в этом случае.

Комментарии:

1. Спасибо, @matthew_tuck за быстрый ответ. А пока я перейду к динамическому методу.