Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException
вообще.
См. также: A хороший список лучших практик
Я бы добавил, очень важно, хорошо использовать модификатор final
. Использование "окончательной" модификатор, когда это применимо в Java
Сводка:
final
для обеспечения хорошей инициализации. @NotNull
и @Nullable
if("knownObject".equals(unknownObject)
valueOf()
поверх toString (). StringUtils
StringUtils.isEmpty(null)
. Блоки проверки допустимости обычно имеют указание параметра массива, во-первых, поля для проверки и наконец (если оно существует), хеш с опциями. В Вашем примере:
:my_custom_validation, parameter1: x, parameter2: y
: my_custom_validation был бы именем поля, в то время как parameter1: x, parameter2: y был бы хешем:
{ parameter1: x, parameter2: y}
Поэтому Вы сделали бы что-то как:
def my_custom_validation(*attr)
options = attr.pop if attr.last.is_a? Hash
# do something with options
errors.add_to_base("error message") if condition.exists?
end
Можно просто сделать что-то вроде этого:
def validate
errors.add('That particular field', 'can not be the value you presented') if !self.field_to_check.blank? && self.field_to_check == 'I AM COOL'
end
Никакая потребность назвать ссылку он, поскольку я верю проверить методу, обрабатывается (если он существует) после любого validates_uniqueness_of - как проверки.
Добавленный: Больше информации в документах API направляющих здесь .