2011-10-30 3 views
3

제한 스키마 (예 : 스키마에 이미 null 제한 및 최대 길이 등이 있음)가 있습니다. 과체중과 비생산적인 모델 모두를 넣을 수 있습니까? ...스키마가 이미 제한적인 경우 이러한 모델 유효성 검사가 지나치게 많습니까?

validates :CouponID,  :presence => true, 
          :numericality => true 

    validates :MerchantName, :presence => true, 
          :length => { :maximum => 100 } 

    validates :MerchantID, :presence => true, 
          :numericality => true 

    validates :Network,  :length => { :maximum => 20 } 

    validates :Label,   :presence => true 

    validates :CouponCode, :length => { :maximum => 100 } 

    validates :EndDate,  :presence => true 

    validates :Link,   :presence => true 

    validates :Status,  :presence => true, 
          :length => { :maximum => 45 } 

    validates :Country,  :length => { :maximum => 100 } 

답변

4

아니오 과용은 아닙니다. 이것들을 유효성 검사기에 넣으면 Rails는 모델을 데이터베이스에 삽입하기 전에이를 포착 할 수 있습니다. 그것은 또한 좋은 디자인과 연습입니다.

이것을 생략하면 대신 MySQL 오류가 발생합니다.

예를 들면. 예를 들어 Comment 모델에 body이라는 속성 문자열이 포함되어 있는데이 테이블은 내 테이블에서 제외 할 수 없습니다.

class Comment < ActiveRecord::Base 
end 

내가 시도하는 경우 :

comment = Comment.create(body: nil)

나는 다음과 같은 예외를 얻을 것입니다.

ActiveRecord::StatementInvalid: Mysql2::Error: Column 'body' cannot be null:

이 나쁜입니다. 응용 프로그램의 자연스러운 흐름이 중단됩니다. 내가 그렇게

class Comment < ActiveRecord::Base 
    validates :body, presence: true 
end 

처럼 내 모델의 유효성 검사기를 넣어 시도하는 경우

그러나, 다음

comment = Comment.create(body: nil)

내가 예외가 발생되지 것입니다 만의 errors 배열 내 변수가 무엇이 잘못되었는지 알려주십시오.

comment.errors.full_messages 
=> ["Body can't be blank"] 

모델에 유효성 검사기를 설치하고 좋은 디자인을 허용하는 것이 좋습니다.

+0

크리스! 오류 처리 부분을 알지 못했습니다. 그것은 모든 것을 깨끗이합니다. – Hopstream

+0

나는 당신의 대답에 대부분 동의하지만, 관련된 한 가지 사항이 누락되어있다 : 당신이 유효성을 설정하고 데이터베이스 테이블에 제약 조건을 추가 할 때 뭔가를 "반복"한다. 실용적인 프로그래머의 [DRY] (http://en.wikipedia.org/wiki/Don't_repeat_yourself)는 어떨까요? 나는 대답이 없지만 내 의견으로는 관련 질문이다 ... – mliebelt

+0

나는 당신의 요지를 본다. 나는 그것이 실제로 코드가 아니기 때문에 DRY에 반대한다고 생각하지 않습니다. 요구 사항이 플랫폼을 변경했지만 데이터베이스와 데이터를 유지하는 것이 었으면 어떨까요? DB 제약으로 인해 데이터 무결성을 위해 애플리케이션 계층에 의존하지 않습니다. 이것은 모든 의견이며 그것을 토론하기 위해 공개됩니다. :) 나는 당신의 요점을 볼 수 있습니다. –

관련 문제