Rails 3 - 模型错误消息验证消息

时间:2012-10-31 15:30:05

标签: ruby-on-rails-3 validation

目前我有一个脚本,用于检查以确保测试卡未在生产中提交(因为Authorize.net在实时模式下接受测试信用卡),如果提交了一个,我会在信用卡号中添加一条错误消息在Test_Credit_Cards数组中是这样的:

TEST_CREDIT_CARDS = ['370000000000002', '6011000000000012', '4007000000027', '4012888818888']
validate :not_a_test_credit_card
 def not_a_test_credit_card
      self.errors[:cc_number] << "number is invalid!" if TEST_CREDIT_CARDS.include?(cc_number) and Rails.env.production?
    end

现在在前端,错误消息如下所示: Credit card cc number is invalid!

无论如何都要将邮件更改为阅读Credit Card number is invalid!我只想从邮件中删除cc部分。

2 个答案:

答案 0 :(得分:1)

首先,从错误消息中删除该号码:

  self.errors[:cc_number] << "is invalid!" if TEST_CREDIT_CARDS.include?(cc_number) and Rails.env.production?

接下来,在config / locales / en.yml:

中放入cc_number的翻译
en:
  activerecord:
    attributes:
      credit_card:
        cc_number: "number"

我更喜欢这个答案而不是Anthony Alberto的回答有三个原因:

  1. 使用ActiveRecord现有的翻译引擎始终是个好主意。
  2. 这样,只要您在其上添加错误,cc_number就会被转换为数字。
  3. 错误在于CreditCard实例本身并不是真的,它与cc_number字段有关。

答案 1 :(得分:0)

应该这样做:

self.errors[:base] << "number is invalid!" if TEST_CREDIT_CARDS.include?(cc_number) and Rails.env.production?

base指的是整个对象,而不是特定的属性。