2010-11-02 23 views
6

'email' alanına sahip bir Kullanıcı modelim var.Raylar: Alan adları

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

Ancak doğrulama hataları oluştuğunda, 'E-posta' yerine kullanılır: şu şekildedir: Bence

, ben 'E-posta adresi' olarak bu alan için etiket hale gelmiş

E-posta her zaman 'E-posta adresi' yerine basitçe 'E-posta'nın kılar:

Eposta

geçersiz olduğunu bu yüzden modele ekleyebilir şey var mı?

çok teşekkürler

cevap

4

, sadece bu ilave etmek config/ilklendiriciler/inflections.rb:

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

Bu kadar kıvrımlara olduğunu düşünüyorum.

+0

Anlaştık, bu çok daha iyi bir çözüm. – gjb

1
validates_presence_of :email, :message => "address cannot be blank" 
1

bu işlemek için 2 yol vardır. Ya EMAIL_ADDRESS veya kullanıcı modelinde doğrulama değiştirmek için sütun adlandırmak (önerilir): görünümünde "E-posta Adresi boş olamaz ...":

oluşturması gerektiğini
validates_presence_of :email, :message => "Address cannot be blank..." 

.

7

Bunu yapmak için tablo sütunlarınızı yeniden adlandırmanız gerekmez. Çok temiz bir düzeltme var:

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 

Yaptığımız şey biz isimlerini özelleştirmek isteyen niteliklerin bir karma oluşturmak olduğunu. Bunların hepsini listelemek zorunda değilsiniz, çünkü birçok özellik isimleri kutudan istediğiniz gibi çalışacaktır. Daha sonra, ismimizin ilk olarak adını bulmaya çalışmak için ActiveRecord'un human_attribute_name yöntemini geçersiz kılıyoruz.

Bu gerçekten harika iki şey: Artık formlarınızda özel etiketler belirtmeniz gerekmiyor ve hata iletileriniz de otomatik olarak yeni adlara sahip olacak! istediğiniz yere bir bonus olarak, artık arayarak, bu isimleri kullanabilirsiniz:

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

Bu adlandırma için daha birleşik yaklaşımı oluşturur. Gelecek hafta "e-postayı" "e-posta" olarak değiştirmek isterseniz, bunu yalnızca bir yerde yapmanız gerekir.

Umarım bu yardımcı olur! GJB yorumlarınızı Genişleyen

+0

Jaime, mutlak bir dehansın. Çok teşekkür ederim! – gjb

+1

Bu, human_attribute_name'in aslında çekimler lehine kullanımdan kaldırıldığı ortaya çıkıyor. Şimdi ActiveSupport :: Inflector.inflections {| inflect | Alternatif olarak inflect.human 'email', 'Email address'}. – gjb

+1

Bence bu artık doğru değil. * * Bir kaç yıl önce kullanımdan kaldırıldı, ancak lehine geri döndü ve şimdi bile i18n desteği (en azından raylarda 3) içeriyor. Hareketli bir hedefi vurmak zor, ama inanıyorum ki human_attribute_name artık kesme bloğunda değil :) –

İlgili konular