2015-01-29 3 views
1

안녕하세요. 내 모델에 상태 시스템이 있고 관찰자에 유효성 검사를 추가해야합니다. 시도했을 때레일 - 관측기에 유효성 검사 추가

def before_transition(record, transition) 
    to = transition.to.to_s 
    record.errors.add(:state, "Can't cancel") if to == 'cancel' 
    return false 
end 

내가 이것을 better_errors 및 binding_of 호출자 보석으로 디버깅 할 때 기록에 추가되는 오류를 확인할 수 있습니다.

>> record.errors.any? 
=> true 

그러나 레코드를 저장 중입니다.

before_update 메소드를 observer에 추가하면. before_transition 메서드를 실행 한 후

def before_update(record) 
    >> record.errors.any? 
    => false  
end 

오류가 사라집니다.

옵저버의 특정 조건에 대한 업데이트 프로세스를 취소하는 방법은 무엇입니까?

추 신 : 유효성 검사기 메서드에서 전환을 얻을 수 없기 때문에 유효성 검사 메서드를 사용하여 모델에서 수행 할 수 없습니다.

답변

0

그것을 할 올바른 방법입니다하지만 난 내가

def before_transition(record, transition) 
    to = transition.to.to_s 
    record.errors.add(:state, "Can't cancel") if to == 'cancel' 
    if record.errors.any? 
    raise ActiveRecord::Rollback, "There is an error" 
    end 
end 
으로 사용

raise ActiveRecord::Rollback, "There is an error" 

해결할 경우 나도 몰라