2013-06-07 19 views
6

Doğru çeviriyi almak için eylemi (oluştur veya güncelle) dikkate alan bir gönderme düğmesi için bir yardımcı yazmak istiyorum. İşte onlar: I18n.t ile düğme yardımcısını gönderin

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" 

bu çalıştı:

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

Fakat işe yaradı vermedi ve RSpec bana gönderin: Bunu sentaktik sorun olduğunu biliyorum

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

, ama bu işin nasıl yapılacağını anlamıyorum ...

+1

'tanımla work' gelmez hakkında biraz daha bilgi görebilirsiniz –

cevap

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

Yardımcı programdan yerel bir değişken gönderdiğinizde veya görüntülendiğinde% {}, en.yml dosyasında kullanılır.

+0

Üzgünüz, görünümü eksik bir' çevirisini vermektedir) lütfen:. Fr.submit.create # {model} 'düğmesi .. –

+0

Dizeleri –

+0

olarak değiştirin def submit submit_button (model) model == nil I18n.t (" # {model} ",: scope => 'submit ' başka I18n.t ("# {modeli}"),: kapsam => '.create submit.update') ucu sonu' – deepthi

0

Model nesnesinin model nesnesinin kendisinde bulunmasına gerek yoktur.

aşağıdaki deneyin:

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

bir formda boş olamaz.

+0

Ama sahip olduğum her model için eşsiz bir yardımcı olmak istiyorum. Bunu yapamam mı? Ve sanırım 'model' bir 'yeni' formunda sıfır olabilir ... –

+0

'model' yeni bir formda sıfır olamaz, nasıl submit_button diyorsunuz? Normalde kontrolör için yeni eylemde, formda kullanılan yeni bir model oluşturursunuz. Çözümü ile her model için benzersiz bir çeviri var. Bu arada bu yöntemi çağırmak daha iyidir çünkü onun sadece düğme değil, çeviriyi sağladığı için submit_button_translation. – dan

12

Bunun için bir yardımcıya ihtiyacınız yoktur, bunu düz raylarla gerçekleştirebilirsiniz. İhtiyacınız olan tek şey düzgün 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" 

Bundan sonra, sadece böyle düğmeye submitcontact.aspx tanımlamanız gerekir sipariş etmektir:

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

Raylar düğmesini için gereken etiketi alacak . Ben sunucu çalıştırdığınızda

Bunu here