2013-06-07 7 views
6

Desidero scrivere un helper per un pulsante di invio, che tenga in considerazione l'azione (creare o aggiornare) per ottenere la traduzione corretta. Eccoli:Invia helper pulsante con I18n.t

fr: 
    submit: 
    create: 
     user: "Créer mon compte" 
     product: "Déposer l'objet" 
     session: "Se connecter" 
    update: 
     user: "Mettre à jour mon compte" 
     product: "Modifier l'objet" 

ho provato questo:

def submit_button(model) 
    if model == nil 
    I18n.t('submit.create.%{model}') 
    else 
    I18n.t('submit.update.%{model}') 
    end 
end 

ma non ha funzionato e RSpec mi mandi che:

Capybara::ElementNotFound: Unable to find button ... 

So che è un problema sintattico, ma non trovo come farlo funzionare ...

+1

Definire 'non work', per favore) –

risposta

0
def submit_button(model) 
    if model == nil 
    I18n.t("submit.create.#{model}") 
    else 
    I18n.t("submit.update.#{model}") 
    end 
end 

Il% {} viene utilizzato nel file en.yml quando si invia una variabile locale da helper o vista.

+0

Ops, quando si esegue il server, la vista rende un' translation missing:. Fr.submit.create # {model} 'button .. –

+0

Cambia' '' a '" 'nelle stringhe –

+0

Prova' def submit_button (modello) se model == nil I18n.t ("# {model}",: scope => 'submit .create ') else I18n.t ("# {modello}",: scope =>' submit.update ') fine fine'. – deepthi

0

È necessario il nome del modello, non l'oggetto del modello stesso.

provare quanto segue:

def submit_button(model) 
    model_name = model.class.name.underscore 
    if model.new_record? 
    I18n.t("submit.create.#{model_name}") 
    else 
    I18n.t("submit.update.#{model_name}") 
    end 
end 

model non deve essere pari a zero in una forma.

+0

Ma voglio fare un aiuto unico per ogni modello che ho. Non posso farlo? E penso che 'model' può, ed è, nil in una forma' nuova' ... –

+0

'model' non può essere nullo in una nuova forma, come si chiama submit_button? Normalmente nella nuova azione per il controller si crea un nuovo modello che viene utilizzato nel modulo. Con la mia soluzione hai una traduzione unica per ogni modello. Tra l'altro è meglio chiamare questo metodo submit_button_translation perché fornisce solo la traduzione e non il pulsante. – dan

12

Non è necessario un aiuto per questo, è possibile realizzarlo con guide semplici. L'unica cosa che serve è ordinare correttamente il vostro I18n YAML

fr: 
    helpers: 
    submit: 
     # This will be the default ones, will take effect if no other 
     # are specifically defined for the models. 
     create: "Créer %{model}" 
     update: "Modifier %{model}" 

     # Those will however take effect for all the other models below 
     # for which we define a specific label. 
     user: 
     create: "Créer mon compte" 
     update: "Mettre à jour mon compte" 
     product: 
     create: "Déposer l'objet" 
     update: "Modifier l'objet" 
     session: 
     create: "Se connecter" 

Dopo di che, è solo bisogno di definire il pulsante di invio in questo modo:

<%= f.submit class: 'any class you want to apply' %> 

Rails vi porterà l'etichetta è necessario per il pulsante .

Si può vedere un po 'di informazioni su di esso here