2011-01-24 14 views
10

Eventuali duplicati:
Custom model attribute (column name) title in Ruby on RailsNomi attributi umani in Rails 3.x?

ho usato questa soluzione in Rails 2.x per sempre:

HUMANIZED_ATTRIBUTES = { 
    :email => "E-mail address" 
    } 

    def self.human_attribute_name(attr) 
    HUMANIZED_ATTRIBUTES[attr.to_sym] || super 
    end 

ma questo provoca strani errori quando ricevendo il errors da un'istanza di ActiveRecord. Qual è il modo corretto per ottenere nomi chiari e leggibili in Rails 3.x?

risposta

6

Credo che i Rails corrette 3 approccio sarebbe quello di utilizzare il translation api, ma sto usando human_attribute_name come segue:

def self.human_attribute_name(attr, options = {}) 
    HUMANIZED_ATTRIBUTES[attr.to_sym] || super 
end 

La chiamata a super può essere in attesa l'argomento opzioni di essere lì.

+0

fresco che lavorato. Avrei dovuto controllare l'API. Per la cronaca, sto usando 'HUMANIZED_ATTRIBUTES [attr.to_sym] || super.split ("") .collect {| word | word.capitalize} .join ("") 'che è carino ma banale :) –

+2

A meno che non stia interpretando male quello che stai facendo, penso che super.titleize faccia la stessa cosa, cioè, capitalizzi tutte le parole. "foo bar baz" .titleize => "Foo Bar Baz" –

+0

+1. C'è qualche ragione per cui non uso titlelize, in quanto è Rails-only e non utilizzabile in Ruby. Ma in questo caso, è perfetto. –

27

Utilizzando human_attribute_name con il quadro I18n è più semplice che penso:

Secondo lei: User.human_attribute_name ("email")

Nel file yml locale:

en: 
    activerecord: 
    attributes: 
     user: 
     email: E-mail address 
+1

Puoi anche usare un simbolo: ' User.human_attribute_name (: email) ' –