2009-03-29 2 views
5

그래서이 버그를 해결하기 위해 머리카락을 잡아 당겼습니다. 나는 항상 내가 건너 뛰는 내 액티브 검증 될 것이라고my_object.save (false)가 실제로 활성 레코드 유효성 검사를 건너 뛰지 않습니다.

@my_model.save(false) 

를 호출 할 때 인상을 받고 있었다. 이것은 부분적으로 사실입니다. 내 개체가 데이터베이스에 저장하고 있습니다 내 주소록 유효 확인입니다. 내 검증 중 하나가 유효성 검사 프로세스 중에 어린이 모델 중 하나를 수정하기 때문에 문제가 발생합니다 (24 시간 위치 예약 응용 프로그램이므로 점심 식사가 저장 될 때 저장하는 날과 그 다음날에 체크합니다). 사용자가 야간 근무를 위해 "2am"을 의미하지 않았는지 확인하십시오.

내 질문 : 실제 유효성 검사를 건너 뛰고 곧바로 데이터베이스로 이동하는 방법이 있습니까? 정상적인 ActiveRecord 동작입니까? 아니면 유효성 검사를 다시 할 필요가 있습니까?

+0

를 사용해서는 안 이는 유효성 검사에서 모델을 수정하기 때문에 문제가됩니다. 데이터를 위생 처리하는 데 유효성 검사 이외의 것을 사용합니다. – bhollis

+0

그게 전부입니다! 나는 그것이 나의 궁극적 인 대답이라고 추측하고있다. 그러나 나는 내가 다른 것을 찾을 수 있는지보기 위해 나의 행운을 시험 할 것이라고 생각했다. – BushyMark

+0

유효성 검사를 사용하여 비즈니스 개체를 후 처리하는 것은 분명히 냄새입니다. 유효성 검사는 데이터를 검사하는 것이지 수정하는 것이 아닙니다. 수정하기 위해서, Before/After-Save, Before/After-Create 등등과 같은 다양한 ActiveRecord 라이프 사이클 후크를 사용하십시오. – Matthias

답변

12

내 문제 중 하나 때문에 존재합니다 http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html

여기를 생략하는 방법에 대한 몇 가지 세부 사항 콜백을 사용하는 방법에 대한 가이드도 있습니다 : 여기 는 액티브 콜백에 대한 설명서입니다 내 유효성 검사는 유효성 검사 과정에서 어린이 모델 중 하나를 수정합니다.

oblems는 사라질 것이다. 유효성 검사는 결코 객체를 수정해서는 안됩니다!

3

오리온에 동의합니다. 객체를 수정하기 위해 유효성 검사를 사용하지 말고 대신 after_save와 같은 콜백을 사용하십시오.

+0

누구든지 이것을 떨어 뜨린 사람은 몇 가지를 재고해야합니다. 유효성 검사는 유효성 검사를위한 것입니다. 의견을 말하면 의견이 일치하면 귀하의 이론이 무엇인지 알 수 있습니다. – nitecoder

5

동의합니다. 콜백을 사용하여 레코드와 상호 작용해야합니다. 검증은, 당신이 그것을 할 필요를 찾을 여전히 경우 .. ..

를 개체를 수정하지 그래서 당신은 유효성 검사 코드가 여전히 그냥 그들의 결과를 무시하고있어 실행되고 있는지 말을하는지

 
myobject.save_without_validation 
관련 문제