class Card < ActiveRecord::Base
belongs_to :trade_type,:class_name => 'TradeType',:foreign_key => 'trade_type_id'
belongs_to :restaurant,:class_name => 'Restaurant',:foreign_key => 'restaurant_id'
validates_presence_of :card_no,:message => '卡号不能为空'
validates_numericality_of :card_no,:message => '卡号必须是数字'
validates_length_of :card_no,:is => 16,:message => '卡号必须是16位'
validates_uniqueness_of :card_no,:message => '卡号不能重复'
end
describe Card do
it 'is valid with card_no,name'do
card = Card.new(
card_no: '1054321239876456',
name: 'zhangsan',
)
expect(card).to be_valid
end
it 'is invalid without a card_no' do
card = Card.new(card_no:nil)
expect(card).to have(1).errors_on(:card_no)
end
end
答案 0 :(得分:0)
您看到3个错误而不是1个错误的原因是因为Card.card_no
为空。这意味着它也不是数字,也不是16个字符。
即。全部三个
validates_presence_of :card_no,:message => '卡号不能为空'
validates_numericality_of :card_no,:message => '卡号必须是数字'
validates_length_of :card_no,:is => 16,:message => '卡号必须是16位'
失败了。
如果您希望仅在存在卡号时验证数字和length_of,请添加allow_blank: true
。
即
validates_presence_of :card_no,:message => '卡号不能为空'
validates_numericality_of :card_no, :allow_blank => true, :message => '卡号必须是数字'
validates_length_of :card_no, :is => 16, :allow_blank => true, :message => '卡号必须是16位'