P.S: Я работал с Ruby менее 48 часов, поэтому ожидайте, что я буду глупым!Помощник подтверждения валидации или получение ошибки проверки
Я настроил проверку на модели, которая все работает нормально. Однако я хочу изменить сообщение, перенастроенное с помощью ограничения уникальности. Сообщение должно быть возвращено методом, который выполняет некоторую дополнительную обработку.
Так, например, если я попытаюсь создать новую модель пользователя, для которой атрибут «name» установлен на «bob», а имя bob с именем уже существует, я хочу отобразить сообщение типа «Боб недоступен, нажмите здесь, чтобы просмотреть текущую учетную запись bob ».
Таким образом, вспомогательный метод будет искать текущую учетную запись bob, получить локализованную строку и обычное размещение строк локализованной строки, поместив имя, ссылку на учетную запись и любую другую информацию, которую я хочу в сообщении.
По существу я хочу что-то вроде:
validates_uniqueness_of :text, :message => self.uniquefound()
def uniquefound()
return "some string i can make up myself with #{self.name}'s info in it"
end
Нет сомнений, что это совершенно неправильно ...
Если это не возможно, я нашел я могу использовать users.errors.added?
, чтобы обнаружить, если имя атрибута имеет уникальную добавленную ошибку, оттуда я могу, вероятно, сделать некоторые манипуляции с хэшем, чтобы удалить уникальную ошибку, а также разместить мой собственный там либо в обратном вызове «after_validation», либо в контроллере ... не разработали точно, как это сделать это, но это мой резервный план.
Таким образом, существует способ предоставления обратного вызова метода класса для класса И, передавая текущую модель этому методу (если это статический метод) или называет его так self
внутри этого метода является проверяемой моделью.
Update
Траление через исходный код рельсы, я нашел этот частный метод, который вызывается при добавлении ошибки к классу ошибок
private
def normalize_message(attribute, message, options)
case message
when Symbol
generate_message(attribute, message, options.except(*CALLBACKS_OPTIONS))
when Proc
message.call
else
message
end
end
end
Итак, если я передать метод как сообщение , я полагаю, что этот метод используется для вызова моей функции/метода и получения возвращаемых данных. Однако кажется, что он не вызывается в области текущего объекта и не проходит в объекте, для которого имеет место ошибка ...
Итак, если мое копание находится на правильном пути, кажется, что вызов метода на текущий объект на сообщение или вызов статического метода, передающего объект, невозможно.
да я даже смотреть на возможности сделать мою собственную уникальную проверку, которая позволила бы мне навсегда мне понравилось сообщение.Думаю, я надеялся на что-то большее, чем обратный вызов. В настоящее время вы пытаетесь выяснить, могу ли я найти сообщение ': took' в сообщениях и заменить его во время' after_validation', но поскольку хэш сообщений является только readbale, я должен использовать любые методы, которые предоставляет класс. Что, вероятно, означает захват всего массива ошибок для атрибута, поиск и удаление значения, совпадающего с ': taken', а затем вставить новое значение – Lee
Хорошо, что он имеет тот же самый точный эффект, но я добавил метод для объекта Proc, который, кажется, подходит и вашим потребностям, и ближе к вашему первоначальному вопросу. – engineersmnky
Ха, я думаю, он имеет тот же эффект, так как он все равно должен запрашивать исходную учетную запись. Но это странно кажется более подходящим способом использования обратного вызова для сообщения, поскольку это то, что я хочу изменить, вместо того, чтобы полностью обрабатывать уникальное ограничение (не то, чтобы оно заканчивалось каким-то другим, так что, может быть, это просто глупо). В любом случае, спасибо за вашу помощь! Угадайте, что я начну поиск в Google и выясню, где указаны два аргумента, поскольку я не мог найти никаких указаний в источнике рельсов, где атрибуты были переданы функции обратного вызова. – Lee