Используя Rails, я пытаюсь получить сообщение об ошибке типа «Поле песни не может быть пустым» при сохранении. Делать следующее:
validates_presence_of :song_rep_xyz, :message => "can't be empty"
... отображается только «Song Rep XYW не может быть пустым», что не очень хорошо, поскольку заголовок поля не является удобным для пользователя. Как я могу изменить заголовок самого поля? Я мог бы изменить фактическое имя поля в базе данных, но у меня есть несколько полей «песни», и мне нужно иметь конкретные имена полей.
Я не хочу взламывать процесс проверки рельсов, и я чувствую, что должен быть способ исправить это.
источник
errors.add :base, msg
? Я хотел бы знать, в каком столбце содержится ошибка, чтобы отобразить ее в правильном поле формы.The password is wrong.
илиThe email address is not valid.
вместоPassword is wrong.
иEmail is not valid.
.В вашей модели:
По вашему мнению
Если вы делаете вместо
вы получаете это сообщение об ошибке с именем атрибута
если вы хотите получить сообщение об ошибке для одного атрибута
источник
validates_presence_of :address1, :message => :put_some_address_please
Попробуй это.
Я нашел это здесь .
Вот еще один способ сделать это. Что вы делаете, это определяете метод human_attribute_name в классе модели. Метод передает имя столбца в виде строки и возвращает строку для использования в сообщениях проверки.
Приведенный выше код отсюда
источник
Да, есть способ сделать это без плагина! Но это не так чисто и элегантно, как использование упомянутого плагина. Вот.
Предполагая, что это Rails 3 (я не знаю, отличается ли он в предыдущих версиях),
сохранить это в вашей модели:
и по мнению, вместо того, чтобы оставить
как было бы, когда мы используем генератор скаффолдов, поместите:
И вы получите только сообщение, которое вы указали в модели, без имени атрибута.
Объяснение:
Пока что мы показываем только одно сообщение, всегда для первой ошибки. Если вы хотите отобразить все ошибки, вы можете зациклить в хэш и показать значения.
Надеюсь, что это помогло.
источник
Код Rails3 с полностью локализованными сообщениями:
В модели user.rb определите валидацию
В config / locales / en.yml
источник
В пользовательском методе проверки используйте:
errors.add(:base, "Custom error message")
так как add_to_base устарела.
errors.add_to_base("Custom error message")
источник
Связанный с принятым ответом и другим ответом вниз по списку :
Я подтверждаю, что форк nanamkim custom-err-msg работает с Rails 5 и с настройкой локали.
Вам просто нужно начать сообщение локали с каретки, и оно не должно отображать имя атрибута в сообщении.
Модель определяется как:
со следующим
en.yml
:item.errors.full_messages
будет отображать:вместо обычного
Name You can't create an item without a name
источник
Я рекомендую установить гем custom_error_message (или как плагин ), изначально написанный Дэвидом Исли
Это позволяет вам делать такие вещи, как:
источник
gem "custom_error_message"
в свой Gemfile - смотрите github для более подробной информацииОдним из решений может быть изменение формата ошибки i18n по умолчанию:
По умолчанию
format: %{attribute} %{message}
источник
Вот еще один способ:
Если вы используете этот шаблон:
Вы можете написать собственное сообщение, например:
Таким образом, из-за подчеркивания, полное сообщение становится «Мое пользовательское сообщение», но лишний пробел в начале незаметен. Если вам действительно не нужно лишнее пространство в начале, просто добавьте
.lstrip
метод.Метод String.lstrip избавит от лишнего пространства, созданного ': _', и оставит все остальные сообщения об ошибках без изменений.
Или, что еще лучше, используйте первое слово вашего пользовательского сообщения в качестве ключа:
Теперь полное сообщение будет «Мое личное сообщение» без лишних пробелов.
Если вы хотите, чтобы полное сообщение начиналось со слова с заглавной буквы, например «URL не может быть пустым», это невозможно сделать. Вместо этого попробуйте добавить другое слово в качестве ключа:
Теперь полное сообщение будет «URL не может быть пустым»
источник
errors.add(:_, 'foobar')
и получить «foobar» в качестве сообщенияПросто сделай это обычным способом:
Но покажите это так
Возвращает
Метод локализации, безусловно, является «правильным» способом сделать это, но если вы делаете небольшой, неглобальный проект и хотите просто начать работать быстро - это определенно проще, чем скачкообразное изменение файлов.
Мне нравится возможность вставлять имя поля где-то кроме начала строки:
источник
Если вы хотите перечислить их все в хорошем списке, но без использования грубого, нечеловеческого имени, вы можете сделать это ...
источник
По вашему мнению
Если вы хотите переопределить сообщение об ошибке без имени атрибута, просто добавьте к сообщению ^ следующим образом:
источник
Я попробовал следующее, у меня сработало :)
1 job.rb
2 jobs_controller.rb
3 _form.html.erb
источник
Вот мой код, который может быть полезен для вас, если он вам все еще нужен: Моя модель:
Затем я создал помощник для отображения сообщений:
источник
Единственный способ получить все настройки, которые я хотел, это использовать
after_validation
обратный вызов, чтобы я мог манипулировать сообщением об ошибке.Разрешите создание сообщения проверки как обычно, вам не нужно пытаться изменить его в помощнике проверки.
создайте
after_validation
обратный вызов, который заменит это сообщение проверки в серверной части, прежде чем оно попадет в представление.В этом
after_validation
методе вы можете делать с сообщением проверки все, что захотите, как обычную строку! Вы даже можете использовать динамические значения и вставить их в сообщение проверки.Метод after_validation будет иметь гораздо большую область действия, чем встроенный помощник проверки рельсов, поэтому вы сможете получить доступ к объекту, который вы проверяете, так же, как вы пытаетесь делать с object.file_name. Что не работает в помощнике проверки, где вы пытаетесь вызвать его.
Примечание: мы используем,
^
чтобы избавиться от имени атрибута в начале проверки, как @Rystraum указал на ссылку на этот гемисточник
Ответ Graywh является лучшим, если он на самом деле отличается в отображении имени поля. В случае динамического имени поля (на основе других полей для отображения), я бы сделал что-то вроде этого
Метод full_message в else - это то, что rails использует внутри метода full_messages, поэтому он выдаст обычные ошибки Rails для других случаев (Rails 3.2 и выше)
источник