Похоже, что запись является моделью соединения между Измерением и Метрикой.поэтому имеет смысл перейти к вашей проверке.
Чтобы обеспечить охват всех необходимых метрик метрик
def validate_required_measurements
metric.required_measurements.each{ |requirement|
unless (measurements.map{|measurement| measurement.name}.includes requirement)
errors.add_to_base "required measurement #{requirement} is missing"
end
}
end
Чтобы обеспечить включение только принятых метрик (при условии, что необязательные метрики также принимаются).
def validate_accepted_measurements
measurements.each{ |measurement|
unless ((metric.required_measurements + metric.optional_measurements).include measurement.name )
errors.add_to_base "invalid measurement #{measurement.name} for metric"
end
}
end
Собрав все воедино, добавьте вышеперечисленное и следуйте модели Entry
validate: validate_accepted_measurements, :validate_required_measurements
Примечание: мой Ruby немного заржавел, поэтому после копирования это не гарантируетсяи вставлять, но это должно приблизить вас достаточно, чтобы исправить ошибки синтаксиса, которые произошли.