Я использую посредника (Ruby on Rails) с HAML.
У меня есть такой код в начале каждой страницы:
- if pageversion == "test"
- domain = data.testvars.domain
- action_url = data.testvars.openlocker_url
- lockergroup = data.testvars.lockergroup
- else
- domain = data.prdvars.domain
- action_url = data.prdvars.openlocker_url
- lockergroup = data.prdvars.lockergroup
но я хочу знать, можно ли сделать что-то вроде этого:
домен = data.#{pageversion}vars.domain ...
поэтому каждый раз, когда он анализирует #{pageversion} и использует выходные данные для создания data.testvars.domain или data.prdvars.domain.
Поэтому я хотел бы либо указать, какой файл .yml использовать на основе #{pageversion}, либо интерпретировать указанную ранее строку как часть имени переменной для поиска в правильном файле.
есть идеи как это сделать?
Мой текущий способ сделать это включает в себя много дублированного кода, и попытка сделать это любым другим способом привела только к ошибкам.
🤔 А знаете ли вы, что...
Фреймворк обеспечивает возможность интеграции с различными фронтенд-технологиями и библиотеками, включая JavaScript и CSS.
Вам необходимо заранее назначить правильный, прежде чем использовать его:
data_vars = pageversion == "test" ? data.testvars : data.prdvars
Затем вы можете использовать присвоенное значение без дублирующего кода:
domain = data_vars.domain
action_url = data_vars.openlocker_url
lockergroup = data_vars.lockergroup
«Я хочу знать, можно ли сделать что-то вроде этого:» domain = data.#{pageversion}vars.domain
.
Вы также можете использовать Object#public_send для достижения этой цели, предполагая, что pageversion == 'test'
или pageversion == 'pdr'
.
Пример:
domain = data.public_send("#{pageversion}vars").domain
action_url = data.public_send("#{pageversion}vars").openlocker_url
lockergroup = data.public_send("#{pageversion}vars").lockergroup
Очевидно, вы могли бы установить локальную переменную, чтобы избежать дублирования public_send
, например.
data_set = data.public_send("#{pageversion}vars") if data.respond_to?("#{pageversion}vars")