Я использую посредника (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}, либо интерпретировать указанную ранее строку как часть имени переменной для поиска в правильном файле.
есть идеи как это сделать?
Мой текущий способ сделать это включает в себя много дублированного кода, и попытка сделать это любым другим способом привела только к ошибкам.
Вам необходимо заранее назначить правильный, прежде чем использовать его:
data_vars = pageversion == "test" ? data.testvars : data.prdvars
Затем вы можете использовать присвоенное значение без дублирующего кода:
domain = data_vars.domain
action_url = data_vars.openlocker_url
lockergroup = data_vars.lockergroup
да, это одна строка оператора if else, вы можете использовать его для коротких условий, таких как этот.
«Я хочу знать, можно ли сделать что-то вроде этого:» 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")
Это действительно то, что я искал. Не могу поверить, что это было так просто. Я предполагаю, что ``` ? data.testvars : data.prdvars ``` — это if-else.