1

私はAddressモデルを持っており、:countryに応じて:zipcodeの長さを検証する必要があります。例えばActiveRecord複数のカスタム長さの有効性確認

  • :country == 'us'場合、最大:zipcode長は5であるべきです。
  • :country == 'br'の場合、最大:zipcodeの長さは8である必要があります。私はRailsの4.2.7上でのRubyを実行している

のように...。

答えて

2
class Address < ActiveRecord::Base 
    ZIP_CODE_VALIDATION = { 'us' => 5, 'br' => 8 }.freeze     

    validate :zip_code_by_country 

    def max_length 
    ZIP_CODE_VALIDATION[country] 
    end 

    def zip_code_by_country  
    return unless zipcode.length > max_length 
    errors.add(:zipcode, "can't be greater than #{max_length}") 
    end 
end