我想为提交按钮编写一个帮助程序,它会考虑操作(创建或更新)以获得正确的翻译。他们在这里:
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"
我试过了:
def submit_button(model)
if model == nil
I18n.t('submit.create.%{model}')
else
I18n.t('submit.update.%{model}')
end
end
但它没有奏效,rspec发给我的是:
Capybara::ElementNotFound: Unable to find button ...
我知道这是一个语法问题,但我找不到如何使这项工作......
答案 0 :(得分:14)
您不需要帮助,您可以使用普通导轨实现它。您唯一需要的是正确订购您的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"
之后,您只需要像这样定义提交按钮:
<%= f.submit class: 'any class you want to apply' %>
Rails将获取按钮所需的标签。
您可以看到有关它的更多信息here
答案 1 :(得分:0)
def submit_button(model)
if model == nil
I18n.t("submit.create.#{model}")
else
I18n.t("submit.update.#{model}")
end
end
从helper或view发送局部变量时,%{}在en.yml文件中使用。
答案 2 :(得分:0)
您需要模型的名称而不是模型对象本身。
尝试以下方法:
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
一定不能为nil。