У меня есть хэш параметра, который содержит разные пары переменных и имен, такие как:
param_hash = {"system_used"=>"metric", "person_height_feet"=>"5"}
У меня также есть объект CalculationValidator, который является не ActiveRecord, но ActiveModel :: Validations. Объект проверяет различные типы ввода из форм. Таким образом, он не имеет определенного набора переменных.
Я хочу создать объект для проверки его следующим образом:
validator = CalculationValidator.new()
validator.system_used = "metric"
validator.person_height_feet = 5
validator.valid?
Моя проблема сейчас заключается в том, что я действительно не предпочел бы кодировать каждый CalculationValidator вручную, а использовал бы информацию из хэша. Здесь есть вся информация, поэтому я хотел бы сделать что-то вроде этого, где MAKE_INTO_VARIABLE () - это функция, которую я ищу.
validator = CalculationValidator.new()
param_hash.each do |param_pair|
["validator.", param_pair[0]].join.MAKE_INTO_VARIABLE() = param_pair[1]
# thus creating
# "validator.system_used".MAKE_INTO_VARIABLE() = "metric"
# while wanting: validator.system_used = "metric"
# ...and in the next loop
# "validator.person_height_feet".MAKE_INTO_VARIABLE() = 5
# while wanting: validator.person_height_feet = 5
end
validator.valid?
Проблема:
По сути, моя проблема в том, как сделать строку «validator.person_height» в переменной validator.person_height , которую я могу использовать для хранения числа 5?
Кроме того, очень важно, чтобы значения param_pair [1] сохранялись как их действительные форматы (целое число, строка и т. Д.), Поскольку они будут проверены.
Я пробовал .send () и instance_variable_set, но я не уверен, что они справятся.