如何将转换插值变量传递给失败的表单验证消息?

时间:2015-02-07 13:56:38

标签: ruby-on-rails devise simple-form

所以,我基本上试图在所需的时间之后点击确认电子邮件链接时出现的错误消息中显示Devise的 confirm_within 时间。

我正在使用YAML翻译文件。

插值变量称为devise_confirm_within

我的YAML是这样的:

en:
  activerecord:
    errors:
      models:
        user:
          attributes:
            email:
              confirmation_period_expired: "some text %{devise_confirm_within}"

通常,我会找到合适的视图,然后将插值变量作为参数传递给translatet方法。像这样:

<p><%= t("devise.mailer.confirmation_instructions.please_click_the_below_link_to_confirm_your_new_email", :devise_confirm_within => distance_of_time_in_words(0, User.confirm_within, :locale => I18n.locale)) %></p>

但是,没有包含confirmation_period_expired翻译密钥的视图,因此我不能以同样的方式执行此操作。

我有一个观点:

<div class="form-inputs">
  <%= f.input :email, :required => true %>
</div>

用户模型:

validates :email, uniqueness: true

我想将所有翻译文本保留在YAML文件中,因此在验证字段中添加:message不会。

那么我怎样才能将devise_confirm_within时间转入确认_period_expired错误消息?

PS:我正在使用simple_form gem for forms,以及dotiw gem来覆盖默认的distance_of_time_in_words方法(这不会影响我遇到的这个问题)。

1 个答案:

答案 0 :(得分:0)

当我将此添加到devise.en.yml并且类似于其他devise..yml文件时,问题被绕过了:

en:
  errors:
    messages:
      confirmation_period_expired: "some text %{period}"

但是我无法将翻译插值变量传递给失败的表单验证(即将变量添加到设计消息中),我仍然很好奇。