Rails: имена полей - PullRequest
       3

Rails: имена полей

6 голосов
/ 02 ноября 2010

У меня есть модель пользователя с полем для электронной почты.

На мой взгляд, я обозначил для этого поля метку «Адрес электронной почты» следующим образом:

<%= form_for(:user) do |f| %>
  <%= f.label :email, 'Email address' %><br /
  <%= f.text_field :email %>
<% end %>

Однако, когда генерируются ошибки проверки, вместо этого используется «Email»:

Email недействителен

Есть ли что-то, что я могу добавить в модель, чтобы: электронная почта всегда отображалась на «адрес электронной почты», а не просто на «электронную почту»?

Большое спасибо

Ответы [ 4 ]

7 голосов
/ 02 ноября 2010

Вам не нужно переименовывать столбцы таблицы, чтобы сделать это.Есть очень чистое исправление:

class User < ActiveRecord::Base
  HUMAN_ATTRIBUTE_NAMES = {
    :email => 'Email address',
    :first_name => 'First name'
  }

  class << self
    def human_attribute_name attribute_name
      HUMAN_ATTRIBUTE_NAMES[attribute_name.to_sym] || super
    end
  end
end

Мы создали хэш атрибутов, в котором мы хотим настроить имена.Вам не нужно перечислять их все, так как многие имена атрибутов будут работать без ограничений, как вы хотите.Затем мы перезаписываем метод ActiveRecord human_attribute_name, чтобы попытаться сначала найти имя в нашем хэше.

Это делает две действительно крутые вещи: вам больше не нужно указывать собственные метки в ваших формах, и ваши сообщения об ошибках будут иметьновые имена автоматически, а также!В качестве бонуса вы можете теперь использовать эти имена где угодно, позвонив по номеру:

<%= User.human_attribute_name(:email) %>

. Это создает более унифицированный подход к именованию.Если вы хотите изменить «электронная почта» на «электронная почта» на следующей неделе, вам нужно сделать это только в одном месте.

Надеюсь, это поможет!

4 голосов
/ 31 января 2013

Расширяя комментарии gjb, я только что добавил это в config / initializers / inflections.rb:

ActiveSupport::Inflector.inflections do |inflect|
    inflect.human 'email', 'Email address' 
end

Я думаю, что это намного лучше.

1 голос
/ 02 ноября 2010

Есть 2 способа справиться с этим.Переименуйте свой столбец в email_address или измените проверку в пользовательской модели (рекомендуется):

validates_presence_of :email, :message => "Address cannot be blank..."

Что должно отображать: "Адрес электронной почты не может быть пустым ..." в вашем представлении.

1 голос
/ 02 ноября 2010
validates_presence_of  :email, :message => "address cannot be blank"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...