Тип custom field Redmine ключ/значение (key/value) очень похож на обычный список (list). Есть одна принципиальная разница.
List (Список)
В случае с обычным списком (list), если пользователь в задаче выбрал значение из списка и сохранил, то это значение так и остается сохраненным в задаче. Если в исходном списке значение переименовывается, то в задаче оно остается неизменным. При редактировании задачи можно сменить значение типа списка.
Подозреваю, что в случае с обычным списком Redmine создает текстовое поле для хранения выбранного значения, а не ссылку на запись в таблице один-ко-многим.
Чтобы вычитать значение из списка используется следующий код. Предположим, что в списке есть следующие значения: ‘WEB’, ‘WAP’. ‘Unspecified’.
values = custom_field_value(CUSTOM_FIELD_ID) || []; val = values[0].to_s; # Read value with ID = 0 from array if (values.include?('WEB')) values[1].to_s; else values[2].to_s; end case when values.include?('WEB') 1 when values.include?('WAP') && values.include?('WEB') 2 else 3 end
Key/value list (Ключ/значение)
Если для трекера испольовалось поле с типом key/value, то при изменении значения в списке происходит изменение значений и во всех задачах, где это значение использовалось ранее. Это классический вариант табоички один ко многим. В таблице со записями списка сменили значение и оно везде изменилось.
Например
Был список со следующими занчениями:
- Значение1
- Значение2
При создании задачи из списка было выбрано Значение1.
Затем в исходном списке переименовали:
- Значение1 -> ЗначениеОдин
- Значение2 -> ЗначениеДва
В случае с обычным списком в задаче будет по-прежнему отображаться Значение1. В случае со списком «key/value list» во всех задачах произойдет замена на ЗначениеОдин.