2013-06-07 1 views
6

Je veux écrire une aide pour un bouton soumettre, qui prend en compte l'action (créer ou mettre à jour) pour obtenir la bonne traduction. Ici, ils sont:Soumettre bouton aide avec 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" 

J'ai essayé ceci:

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

Mais il n'a pas fonctionné et rspec me envoyer que:

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

Je sais que c'est un problème syntactique, mais je ne trouve pas comment faire ce travail ...

+1

Définir 'ne work', s'il vous plaît) –

Répondre

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

Le% {} est utilisé dans le fichier en.yml lorsque vous envoyez une variable locale depuis helper ou view.

+0

Oops, quand je lance le serveur, la vue rend une' traduction manquante. Fr.submit.create # {model} 'button .. –

+0

Change' '' en '' 'en chaînes –

+0

Essayez' def submit_button (modèle) si modèle == nil I18n.t ("# {model}",: scope => 'submit .create ') sinon I18n.t ("# {modèle}",: scope =>' submit.update ') fin end'. – deepthi

0

Vous avez besoin du nom du modèle et non de l'objet modèle lui-même.

les opérations suivantes:

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 ne doit pas être nul sous une forme.

+0

Mais je veux faire une aide unique pour chaque modèle que j'ai. Je ne peux pas faire ça? Et je pense que 'model' peut, et est, nul dans une nouvelle forme ... –

+0

' model' ne peut pas être nul sous une nouvelle forme, comment appelez-vous submit_button? Normalement, dans la nouvelle action pour le contrôleur, vous créez un nouveau modèle qui est utilisé dans le formulaire. Avec ma solution, vous avez une traduction unique pour chaque modèle. D'ailleurs il vaut mieux appeler cette méthode submit_button_translation car elle ne fournit que la traduction et non le bouton. – dan

12

Vous n'avez pas besoin d'un assistant pour cela, vous pouvez le réaliser avec des rails lisses. La seule chose dont vous avez besoin est de commander correctement votre 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" 

Après cela, il vous suffit de définir votre bouton soumettre comme ceci:

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

Rails prendra l'étiquette dont vous avez besoin pour le bouton .

Vous pouvez voir plus d'informations à ce sujet here