Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Submit button helper with I18n.t

I want to write a helper for a submit button, that takes in account the action (create or update) to get the right translation. Here they are :

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"

I tried this :

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

But it didn't worked and rspec send me that :

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

I know that's a syntactical problem, but I don't find how to make this work...

like image 954
Flo Rahl Avatar asked Jun 07 '13 06:06

Flo Rahl


1 Answers

You don't need a helper for that, you can achieve it with plain rails. The only thing you need is to properly order your 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"

After that, you only need to define your submit button like this:

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

Rails will take the label you need for the button.

You can see some more info about it here

like image 139
Fran Avatar answered Oct 17 '22 04:10

Fran