2012-07-29 2 views
0

현재 큰 배열에서 선택된 몇 가지 미리 정의 된 속성을 사용하여 하나의 상위 개체를 사용하는 양식이있는 레일 3 애플리케이션에서 작업하고 있습니다. 각 부모 개체에는 부모 개체에서 선택한 미리 정의 된 특성에 따라 서로 다른 고유 한 제한이있는 각각 다른 최대 최소 값을 가질 수있는 여러 자식 개체가 있습니다.레일 3 매우 큰 모델 유효성 검사

이러한 개체의 유효성을 검사하면 매우 큰 모델 파일이 생성된다는 사실을 빨리 알게되었습니다. 이 모델에서 이러한 유형의 대규모 유효성 검사를 제거하는 적절한 방법이 있는지 궁금하게 생각하고있었습니다 (또는 적어도 모델 지점을 다른 곳으로 가짐).

또한 더 높은 수준의 질문은 말로하는 것이 정상입니까? 1000 줄의 코드가 개체 데이터의 무결성을 확인하는 것입니까?

+1

모델에 1000 줄의 유효성 검사 코드가있는 것은 아닙니다. – Dty

+0

음, 정상적인 것은 정확한 용어가 아닌 것 같습니다. 더 나은 용어는 그럴듯 ​​해 보입니다. 나는 헬퍼 메소드를 사용할 수있는 대부분의 것들과 어쩌면 1 개의 맞춤 헬퍼 (예 : 전자 메일 주소의 유효성 검사)를 알 수 있습니다. 그러나 내가하고있는 일은 당신이 선택한 것에 따라 고유 한 세부 사항을 많이 가지고 있습니다. 따라서 모든 작은 사건을 잡으려면 코드가 꽤 빨리 부풀려지는 것처럼 보입니다. 따라서 왜 내가 모델 밖으로 이동하려고하는지. – user1560348

답변

2

1) 당신은 ActiveModel :: 검사기에서 inheirting 및 유효성을 검사 기록을 소요 validate 메소드 구현 포함하는 사용자 정의 유효성 검사기 클래스를 만들 수 있습니다 레일 3에서

class Report > ActiveRecord::Base 
    validates with MyValidator 
end 

class MyValidator < ActiveModel::Validator 
def validate(record) 
    record.errors[:base] = << "Error" unless is_valid(record) 
    end 
end 

2), 검증이 있습니다를 ActiveModel :: EachValidator :

class Report < ActiveRecord::Base 
    validates :name :report_like => true 
end 

class ReportLikeValidator < ActiveModel::EachValidator 
    def validate_each(record, attribute, value) 
    unless value["Report"] 
     record.errors.add attribute, "Does not appear to be a ..." 
    end 
end 
+0

이러한 맞춤형 검사기 클래스의 경우 레일 앱에 어디에 넣어야합니까? 내가 읽은 곳 중 일부는 lib 디렉터리를 권장했지만, 일단 모델에 코드를 입력하면 간단한 간단한 유효성 검사가 수행됩니다. – user1560348

+0

이 게시물을보십시오 : http://my.rails-royce.org/2010/07/21/email-validation-in-ruby-on-rails-without-regexp/ – JohnMerlino