2012-02-13 16 views
7

Qualcuno ha qualche consiglio su come tradurre le associazioni di modelli in Rails?Traduci associazione modello Rails - non funziona

Ad esempio: ho un modello Persona, che può avere molti telefoni. Tuttavia, una persona deve avere almeno un telefono. Non sono in grado di tradurre quella convalida. Il meglio che potevo fare era questa:

validates_presence_of :phones, :message => "At least one phone is required." 

E sul mio YAML, ho sostituito questa linea di omettere la %{attribute}:

format: ! '%{message}' 

In questo modo viene visualizzato solo il mio messaggio, e evito la ONU nome del campo tradotto da visualizzare.

Questo mi causa un sacco di mal di testa, perché alcune gemme semplicemente non mi permettono di passare :message => "something describing the error", quindi ho voluto configurare tutti i messaggi di errore attraverso il mio YAML.

Inoltre, con alcuni modelli sono in grado di tradurre i loro attributi, mentre con altri non lo sono. Ad esempio:

activerecord: 
    attributes: 
    additional_info: 
     account_manager: "Manager" 

Questo funziona. Posso vedere sul mio modulo "Manager". Tuttavia, quando questo campo ha un errore, Rails lo visualizzerà come "Additional info account manager can't be blank".

ho provato questo:

activerecord:   
    errors: 
    models: 
     additional_info: 
     attributes: 
      account_manager: "Manager" 

ma senza fortuna.

Ho letto i documenti, ma nessun indizio sul motivo per cui sta accadendo.

risposta

9

Rails 3.2 ha cambiato questo comportamento. Il modo in cui ho postato prima è deprecato.

Ora, per tradurre associazioni, è necessario aggiungere una barra (invece di annidare tutto). Così, invece di questo:

activerecord: 
     attributes: 
     person: 
      additional_info: 
      account_manager: "Manager" 

la correttezza ora è:

activerecord: 
     attributes: 
     person: 
      additional_info/account_manager: "Manager" 

Inoltre, ho capito che has_many associazioni vengono tradotti in modo diverso da quello. Se si desidera tradurre quelli, il seguente esempio può aiutare:

activerecord: 
     attributes: 
     emails: 
      address: "E-mail field" 

Al posto del nome del modello, come ho fatto in precedenza, è necessario passare il nome dell'associazione, in questo caso emails.

Controllare questo commento e tirare richiesta di maggiori informazioni:

https://github.com/rails/rails/commit/c19bd4f88ea5cf56b2bc8ac0b97f59c5c89dbff7#commitcomment-619858

https://github.com/rails/rails/pull/3859

+0

stavo pensando qualcosa di simile, ma non la fortuna con la posizione esatta degli elementi e non la fortuna su come trovare, grazie !, Molto apprezzato – Alexis

7

Ecco i percorsi fondamentali validi per Rails 4.1:

# Basic Attribute on Model 
activerecord: 
    attributes: 
    #{model_class.model_name.i18n_key}: 
     #{attribute_name}: 
     "Localized Value" 

# Attribute on Nested Model 
activerecord: 
    attributes: 
    #{model_class.model_name.i18n_key}/#{association_name}: 
     #{attribute_name}: 
     "Localized Value" 
    #{association_name}: 
     #{attribute_name}: 
     "Fallback Localized Value" 

Quindi, dato questo modello (che ha la i18n_key di :person):

class Person 
    has_many :friends 
end 

Avresti queste definizioni di locale:

activerecord: 
    attributes: 
    person: 
     first_name: 
     "My Name" 
    person/friends: 
     first_name: 
     "My Friend's Name" 
    friends: 
     first_name: 
     "A Friend's Name" 

Se il modello è un namespace, come ad esempio:

class MyApp::Person 
    has_many :friends 
end 

il i18n_key diventa :my_app/person e la tua / tasto inizia a consumarsi:

activerecord: 
    attributes: 
    my_app/person: 
     first_name: 
     "My Name" 
    my_app/person/friends: 
     first_name: 
     "My Friend's Name" 
    friends: 
     first_name: 
     "A Friend's Name" 
Problemi correlati