2010-06-14 5 views
2

ActiveRecord 모델 유효성 검사를 사용하여 RESTful 응용 프로그램에서 양식의 유효성을 검사하고 있습니다.ActiveRecord 유효성 검사 예외 생성 (아니!)

내가 않는 만드는 작업을했다 :

@association = Association.new 

양식의 수신 끝을 사용하여 데이터베이스에 저장하는 형태로 매개 변수의 속성의 데이터 해시를 만듭니다

@association = user.associations.create(data) 

유효성 검사가 실패 할 경우 단순히 create 액션을 렌더링하려고합니다. 문제는 모델 유효성 검사가 실패 할 경우 .create (not!) 메서드가 예외를 throw한다는 것입니다. 예 : 모델의

validates_format_of :url,   :with => /(^$)|(^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(([0-9]{1,5})?\/.*)?$)/ix, :message => "Your url doesn't seem valid." 

가 생성됩니다

ActiveRecord::RecordInvalid Exception: Validation failed: Url Your url doesn't seem valid. 

내가 .create 생각! .create는 예외 인 반면 예외는 throw됩니다.

여기에 뭔가가 있습니까?

루비 1.8.7 패치 레벨 173 개 & 레일 2.3.3

답변

6

주의 깊게 createcreate!의 설명서를 참조하십시오.

createcreate! 모두 귀하의 경우 유효성 검사에서 콜백을 확인하십시오. 예외가 발생하지하면서 경우에 해당하는 경우 create 방법은 레코드가 유효하지 않은 경우 create! 방법은 예외를 제기, false를 돌려줍니다. 데이터베이스에서 고유 인덱스 및 모델에 설정할 수없는 확인이있는 경우

그러나, createActiveRecord::RecordNotUnique을 던질 수 있습니다. 이 경우 validates :fieldname, uniqueness: true을 모델에 추가해야합니다.

+0

어떻게 하나는 예외를 던지고 때 생성의 거짓 반환을 결정 가야합니까? 유효성 검사가 실패했음을 알기 위해 예외를 처리해야합니까? 당신이 고유 인덱스없이 확인이있는 경우 – onyxrev

+8

완전히 정확하지,'.create'는 액티브 :: RecordNotUnique을 던질 수 –

관련 문제