使用自定义消息进行验证且没有属性名称

时间:2014-07-16 16:08:08

标签: ruby-on-rails ruby-on-rails-4 rails-i18n

Ruby on Rails 4.1

表单在模型中检查了验证。我有自定义消息,显示消息之前的属性名称。

我正在尝试在en.yml文件中指定属性的转换,或者只是删除属性名称。我没有收到错误,但只是在没有自定义消息的情况下人性化了这些属性。

示例,我收到的一封邮件是* Cc name your name on the credit card cannot be blank,我希望它说Your name on the credit card cannot be blankCredit card name cannot be blank

型号:

class Payment < ActiveRecord::Base

validates_presence_of :telephone, :email, :address1, :city, :state, :postal_code, :country, :cc_type, :cc_number, :ccv, :expires_on, :ship_name, :ship_address1, :ship_city, :ship_state, :ship_postal_code, :ship_country

validates_presence_of :cc_name, 
:message => ' Your name on the credit card cannot be blank'

validates_presence_of :name_auth, 
:message => ' Your name authorizing the purchase cannot be blank'

错误消息文件:

<% if @payment.errors.any? %>
<div id="error_explanation">
    <div class="alert alert-error">
        The form contains <%= pluralize(@payment.errors.count, "error") %>
    </div>
    <ul>
        <% @payment.errors.full_messages.each do |msg| %>
            <li>* <%= msg.humanize %></li>
        <% end %>
    </ul>
</div>
<% end %>

en.yml文件:

en:
activerecord:
attributes:
  cc_name: "Credit card name"
  name_auth: "Authorizing name"
  date_auth: "Authorized date"
  card_holder_auth: "Authorized card holder"
  charge_auth: "Authorizing payment"
  cc_number: "Credit card number" 
  ccv: "Card code verification (CCV)"

2 个答案:

答案 0 :(得分:1)

所以经过太多时间我发现最好的答案应该是设置错误的格式。谁想要错误中的属性名称?我可以轻松地添加它,并且实际上将其属性命名为最终用途的内容?无论如何,这会重新格式化错误消息:

en:
  errors:
    format: "%{message}"

默认为&#34;%{attribute}%{message}&#34;,IMO通常不需要,应该更改。

答案 1 :(得分:0)

最好将错误消息放入en.yml中,如下所示:

en:
 activerecord:
   errors:
     models:
       payment:
         attributes:
          cc_name:
            blank: "Credit card name cannot be blank"

然后您可以删除模型中的自定义消息。