0

目前我有一个脚本,用于检查以确保未在生产中提交测试卡(因为 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从消息中删除该部分。

4

2 回答 2

1

首先,从错误消息中删除数字:

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

接下来,将 cc_number 的翻译放在 config/locales/en.yml 中:

en:
  activerecord:
    attributes:
      credit_card:
        cc_number: "number"

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

  1. 使用 ActiveRecord 现有的翻译引擎总是一个好主意。
  2. 这样,每当您在其上添加错误时,cc_number 都会被转换为数字。
  3. 错误出在 CreditCard 实例本身并不是真的,它与 cc_number 字段特别相关。
于 2012-10-31T16:22:03.050 回答
0

那应该这样做:

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

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

于 2012-10-31T16:02:37.597 回答