내 응용 프로그램에서는 ActiveModel 유효성 검사가 전혀 실행되지 않는 것으로 보입니다. 즉, 데이터가 실제로 무효 임에도 불구하고 항상 true (유효한) 값을 반환합니다.Rails3/Mongoid 유효성 검사 실행 안 함
ruby-1.9.2-p290 :028 > QueueItem.validators
=> [#<ActiveModel::Validations::PresenceValidator:0x007f8303adb190 @attributes=[:user], @options={:allow_blank=>false, :allow_nil=>false}>, #<ActiveModel::Validations::LengthValidator:0x007f8303ee5a60 @attributes=[:notes], @options={:minimum=>2, :allow_blank=>false}>]
ruby-1.9.2-p290 :029 > qi = QueueItem.new
=> #<QueueItem _id: 4edf5a0535be359a79000004, _type: nil, created_at: nil, updated_at: nil, user_id: nil, appointment_time: nil, notes: nil, called: false, visited: false, rejected: false>
ruby-1.9.2-p290 :030 > qi.notes = "x"
=> "x"
ruby-1.9.2-p290 :031 > qi.valid?
=> true
검증이 같은 모델에 등록되는 사실 것 같다 :
다음class QueueItem
include Mongoid::Document
include Mongoid::Timestamps
belongs_to :user
field :appointment_time, type: DateTime, allow_nil: true
field :notes, type: String, allow_nil: true
# field :position, type: Integer, default: 0
validates :user, presence: true, allow_blank: false, allow_nil: false
validates_length_of :notes, :minimum => 2, allow_blank: false
end
, 저장하거나 잘못된 데이터와 기록을 확인하려고, 이것은 당신이 무엇을 얻을 QueueItem.validations
으로 표시됩니다. 그렇다면 왜 그들은 언제나 사실로 돌아 옵니까? 이것은이 모델뿐만 아니라 내 응용 프로그램의 모든 모델에서 발생합니다.
UPDATE 나는 사용자 지정 유효성 검사기를 추가하고 성공적으로 발사된다. 내가 model.valid?
를 호출 할 때
validate :test_validation
def test_validation
logger.info ":test_validation has fired"
self.errors[:base] << "Something is royally screwed!"
end
지금, 그것은 false
을 반환하고, 해당 메시지 로거 출력. 사용자 정의 유효성 검사기는 실제로 객체에 오류를 추가하고 false를 반환합니다. 여전히 표준 액티브 모델이 실행되지 않는 이유를 명확히 밝히지 않았습니다. 이것들을 추적 할 방법이 있습니까?
이상한, 왜 이런 일이 일어날 지 모르겠다. –