Rails переопределяет сообщение валидатора - PullRequest
2 голосов
/ 16 апреля 2010

У меня есть сайт, который подается в двух вариантах: английском и французском. Вот код

app/views/user/register.html.erb
-----------------          
<% form_for .....>
  <%= f.text_field :first_name %> 
<% end %>

app/models/user.rb
------------------
class User < ActiveRecord::Base
  validates_presence_of :first_name

end 

Теперь для отображения сообщения об ошибке в случае, если сайт обслуживается во французской версии, у меня есть

app/config/locales/fr.yml
-------------------------
  activerecord:
    errors:
      messages:
        empty: "ne peut pas être vide"

Поэтому, если кто-то не заполняет имя, валидатор берет имя поля и добавляет пользовательское сообщение для пустого предложения, давая

"First name ne peut pas être vide"

, что неверно, потому что «Имя» на французском означает «Prénom», следовательно, оно должно быть

"Prénom ne peut pas être vide"

Пожалуйста, может кто-нибудь предложить способ достижения желаемого результата.

Ответы [ 2 ]

6 голосов
/ 16 апреля 2010

Из документации Rails для generate_full_methods в ActiveRecord :: Класс ошибки ...

Переносит сообщение об ошибке в полный текст сообщения.

Формат full_message по умолчанию для любая локаль - это "{{attribute}} {{message}} ". Можно указать специфичный для локали по умолчанию full_message отформатировать, сохранив его как перевод для ключа : "Activerecord.errors.full_messages.format"

.

Дополнительно можно указать сообщение об ошибке проверки форматировать, сохраняя перевод для : "Activerecord.errors.full_messages [message_key].". Например. формат full_message для любого проверка, которая использует: пустое как ключ сообщения (например, validates_presence_of) может быть сохранен в : "Activerecord.errors.full_messages.blank"

.

Поскольку ключ сообщения используется проверка может быть перезаписана на validates_ * класс макроуровня можно настроить full_message формат для любой конкретной проверки:

# app / models / article.rb class Article validates_presence_of :title, :message => :"title.blank" end # config / locales / en.yml en:

activerecord:
  errors:
    full_messages:
      title:
        blank: This title is screwed!
0 голосов
/ 16 апреля 2010

Вы можете использовать этот драгоценный камень: advanced_errors

для указания пользовательских сообщений об ошибках, которые не включают имя поля, если первый символ - «^». Итак, у вас будут сообщения типа

"^Prénom ne peut pas être vide"

и они будут показываться нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...