2013-06-07 16 views
6

Chcę napisać pomocnika dla przycisku przesyłania, który uwzględnia działanie (utwórz lub zaktualizuj), aby uzyskać właściwe tłumaczenie. Oto one:Wyślij pomocnika przycisku z 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" 

Próbowałem to:

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

Ale to nie działało i rspec wysłać mi, że:

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

wiem, że to syntaktyczna problem ale nie wiem, jak to zrobić ...

+1

Define 'nie work', proszę) –

Odpowiedz

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

% {} jest używany w pliku en.yml podczas wysyłania zmiennej lokalnej z helpera lub widoku.

+0

Ups, kiedy uruchomić serwer, widok renderuje' translation missing. Fr.submit.create # {model} 'button .. –

+0

Zmiana' '' '' 'in string –

+0

Wypróbuj' def submit_button (model) if model == zero I18n.t ("# {model}",: scope => 'wyślij .create ') else I18n.t ("# {model}",: scope =>' submit.update ') koniec koniec'. – deepthi

0

Potrzebujesz nazwy modelu, a nie samego obiektu modelu.

Spróbuj wykonać następujące czynności:

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 nie musi być zerowa w formularzu.

+0

Ale chcę zrobić wyjątkowy pomocnik dla każdego modelu, który mam. Nie mogę tego zrobić? I myślę, że 'model' może, i jest, zero w" nowej "formie ... –

+0

' model' nie może być zerowy w nowej formie, jak wywołać submit_button? Zwykle w nowej akcji dla kontrolera tworzysz nowy model, który jest używany w formularzu. Dzięki mojemu rozwiązaniu masz unikalne tłumaczenie dla każdego modelu. Przy okazji lepiej jest wywołać tę metodę submit_button_translation, ponieważ zapewnia ona tylko tłumaczenie, a nie przycisk. – dan

12

Nie potrzebujesz do tego pomocy, możesz to osiągnąć dzięki zwykłym szynom. Jedyne czego potrzebujesz to właściwie zamówić swoją 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" 

Po tym, tylko trzeba zdefiniować przycisk przedstawić tak:

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

Szyny odbędzie etykietę potrzeba do przycisku .

Można zobaczyć trochę więcej informacji o tym here

Powiązane problemy