#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 за быстрый ответ. А пока я перейду к динамическому методу.