Уникальный подход, о котором я не видел никого!
Единственный способ получить все необходимые настройки - использовать обратный вызов after_validation
, чтобы я мог манипулировать сообщением об ошибке.
Разрешить создание сообщения проверки как обычно, вам не нужно пытаться изменить его в помощнике проверки.
создает обратный вызов after_validation
, который заменит это сообщение проверки в серверной части до того, как оно попадет в представление.
В методе after_validation
вы можете делать все что угодно с сообщением проверки, как обычная строка! Вы даже можете использовать динамические значения и вставить их в сообщение проверки.
#this could be any validation
validates_presence_of :song_rep_xyz, :message => "whatever you want - who cares - we will replace you later"
after_validation :replace_validation_message
def replace_validation_message
custom_value = #any value you would like
errors.messages[:name_of_the_attribute] = ["^This is the replacement message where
you can now add your own dynamic values!!! #{custom_value}"]
end
Метод after_validation будет иметь гораздо большую область действия, чем встроенный помощник проверки рельсов, поэтому вы сможете получить доступ к объекту, который вы проверяете, так же, как вы пытаетесь делать с object.file_name. Что не работает в помощнике проверки, где вы пытаетесь вызвать его.
Примечание: мы используем ^
, чтобы избавиться от имени атрибута в начале проверки, поскольку @Rystraum указал на ссылку gem