2011-01-24 14 views
10

Powiel możliwe:
Custom model attribute (column name) title in Ruby on RailsLudzkie nazwy atrybutów w Railsach 3.x?

Używam tego rozwiązania w Rails 2.x zawsze:

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

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

ale to powoduje błędy dziwaczne kiedy coraz errors z instancji ActiveRecord. Jaki jest poprawny sposób na uzyskanie ładnych, czytelnych dla człowieka nazw w Railsach 3.x?

Odpowiedz

6

myślę odpowiednie szyny 3 podejściem byłoby użyć translation api, ale używam human_attribute_name następująco:

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

Wywołanie Super można spodziewa argument opcje tam być.

+0

Chłodny że pracował. Powinienem był sprawdzić API. Tylko FYI używam 'HUMANIZED_ATTRIBUTES [attr.to_sym] || super.split ("") .collect {| word | word.capitalize} .join ("") 'co jest urocze, ale banalne :) –

+2

Jeśli nie rozumiem tego, co robisz, myślę, że super.titleize zrobiłoby to samo, to znaczy, zamienia wszystkie słowa w słowa. "foo bar baz" .titleize => "Foo Bar Baz" –

+0

+1. Jest jakiś powód, dla którego nie używam titlelize, tak jak to jest tylko Rails i nie jest użyteczny w Ruby. Ale w tym przypadku jest doskonały. –

27

Korzystanie human_attribute_name z ramami I18n jest bardziej proste myślę:

W widoku: User.human_attribute_name ("Wyślij")

W pliku yml regionalne:

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

Możesz także użyć symbolu: ' User.human_attribute_name (: email) ' –

Powiązane problemy