2012-10-31 113 views
0

目前我有一个脚本来检查以确保测试卡未在生产中提交(因为Authorize.net在实时模式下接受测试信用卡)并向错误消息添加错误消息信用卡号码,如果提交的一个是Test_Credit_Cards阵列,像这样的:Rails 3 - 模型错误消息验证消息

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!我只是想删除来自消息的部分。

+0

你确定它不是'信用卡cc_number号码无效'吗? –

+0

对不起,这是我的一个错字......我只想从我的错误信息中删除属性 – dennismonsewicz

回答

1

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

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

接下来,把翻译CC_NUMBER在配置/区域设置/ en.yml:

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

我喜欢这个答案在安东尼Alberto的回答有三个原因:

  1. 使用ActiveRecord现有翻译引擎总是一个好主意。
  2. 这样,cc_number将被转换为数字,只要您在其上添加错误。
  3. 错误发生在CreditCard实例本身并不是真的,它与cc_number字段具体相关。
0

应该这样做:

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

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