2012-09-24 4 views
0

나는 다음과 같은 지정 유효성 검사가 있습니다유효성 검사는 브라우저에서 작동하지만 콘솔에서는 작동하지 않습니다. 왜?

응용 프로그램/검증/clock_able_validator.rb

class ClockAbleValidator < ActiveModel::Validator 

    def validate(record) 
    time_tracker = time_tracker(record) 
    error_location = "activerecord.errors.models.activity.attributes.base" 
    record.errors[:clock_in_able] = I18n.t "#{error_location}.clock_in_able" if !clock_in_able?(record,time_tracker) 
    record.errors[:clock_out_able] = I18n.t "#{error_location}.clock_out_able" if !clock_out_able?(record,time_tracker) 
    end 

    def clock_in_able?(record,time_tracker) 
    return true if time_tracker.nil? 
    return true if !time_tracker.clock_out.nil? 
    return true if time_tracker.id == record.id 
    return false 
    end 

    def clock_out_able?(record,time_tracker) 
    return false if record.id == time_tracker.id and !time_tracker.clock_out.nil? 
    return true if !record.clock_in.nil? 
    return false 
    end 

    def time_tracker(record) 
    TimeTracker.find_all_by_activity_id(record.activity_id).last || TimeTracker.new 
    end 
end 

time_tracker 단지 이전 기록입니다. 새 레코드는 이전 레코드와 관련된 특정 조건이 충족되면 유효성이 검사됩니다.

이 유효성 검사는 브라우저에서 테스트 할 때 완벽하게 작동합니다. 내 질문입니다 : 콘솔에서 테스트 할 때 유효성 검사가 작동하지 않는 이유는 무엇입니까? 콘솔에서 데이터베이스의 레코드를 저장할 수 있습니다.

I는 record.errors[:bla] = "Why only this error works?" 같은 다른 오류를 추가하는 경우 [EDIT]

. 유효성 검사는 콘솔에서 전달되지 않습니다. 그래서 예상대로 작동합니다. 그것은 다른 유효성 검사를 위해 통과하고 그것을해서는 안됩니다.

[수정 2]

나는 신선한 데이터베이스를 시작하는 경우. :clock_out 특성의 값만 있고 브라우저의 :clock_in 특성 및 모든 위치의 값이 아닌 TimeTracker 개체를 저장하려고했지만 유효성 검사를 통과하지 못하기 때문에 콘솔이 실패합니다. TimeTracker.find_all_by_activity_id(record.activity_id).last은 nil을 반환하므로 time_tracker는 TimeTracker.new의 값을 가져옵니다. 유효성 검사가 실패합니다. 콘솔에서도 저장됩니다.

답변

1

서버와 동일한 환경에서 Rails 콘솔을 실행하고 있습니까? 예를 들어 서버가 프로덕션 모드에서 실행 중이지만 콘솔이 개발 중에 실행중인 경우 다른 데이터베이스를 쿼리 할 수 ​​있습니다. 그런 다음 TimeTracker.find_all_by_activity_id은 다른 결과를 반환합니다.

+0

개발 환경에 있습니다. TimeTracker.all에서 동일한 데이터를 제공합니다. RSpec으로 테스트 할 때도 작동합니다. 유효성 검사는 콘솔 어디에서나 가능하지만 작동합니다 ... 이제는 전혀 문제가되지 않으며 응용 프로그램에 영향을주지 않기를 바랄뿐입니다. 나는 그것이 작동하지 않는 예제를 업데이트 할 것이다. –

+0

콘솔을 다시로드하지 않았기 때문에 객체가 유효성 검사를 통과하고 있다고 생각합니다. 방금 다시 시도했는데 유효성 검사가 더 이상 진행되지 않습니다. 나는 콘솔을 다시로드했지만 실제로. 귀하의 의견을 보내 주셔서 감사합니다! –

관련 문제