2009-06-16 8 views
3

model_name.rb 파일에 유효성 검사가있는 모델이 있으면 수동으로 해당 유효성 검사에 어떻게 액세스 할 수 있습니까? 내장 된 Rails 트릭과 함께 작동하는 자체 양식 유효성 검사 시스템을 작성하고 모든 것을 가능한 한 건조한 상태로 유지하려고합니다. 내 주요 문제는 양식 값이 데이터베이스에 도달하기 전에 서버 측 유효성 검사를 수행해야한다는 것입니다 (다중 단계 양식 사용).레일스 모델의 유효성 확인

User.validations.each do |v| 
    puts v.constraint.to_s + " " + v.message 
end 

같은 방법이 이와 유사한 있나요 경우

는 기본적으로 궁금하네요?

미리 감사드립니다.

답변

1

내 주요 문제는 내가 양식 값이 데이터베이스에 접속 의 이전 서버 측 검증을 할 필요가있다 (나는 다단계 양식을 사용하여 해요). 모델은 클래스 파일의 검증에 따라 유효하지 않은 경우 (당신이 검증을 억제하기 위해 save 방법에 false을 통과하지 않는 한)

는, 다음의 데이터는 데이터베이스에 저장되지 않습니다. 그것의 valid?/invalid? 메소드를 호출하여 어느 시점에서 유효한 있다면

  • 당신은 모델을 요청할 수 있습니다.
+0

내 양식은 대략 4 단계가 있습니다. 어떤 모델도 세 번째 단계까지 .save 메서드를 호출하지 않습니다. 그러나 몇 가지 기본 유효성 검사 (즉, 사용자가 선택할 수있는 몇 가지 확인란 항목이 제공됩니다. 상자를 선택하지 않으면 오류가 출력되어야합니다.) 저장을 호출하지 않고 유효성 검사가 여전히 호출됩니까? – user94154

+0

유효/무효에 대한 위의 편집을 참조하십시오. 행동 양식. –

0

ActiveRecord 개체는 유효한 후 오류 메서드를 노출합니까? 어떤 인증이 위반되었는지에 대한 메시지를 제공합니다. 너는 유효하게 검사 할 수 있니? 양식의 일부 필드가 유효하지 않은지 확인하십시오. 필드 field1 및 field2가있는 양식의 경우 이와 같은 작업을 수행 할 수 있습니다.

unless x.valid? 
    [:field1,:field2].each do |field| 
    yes_there_was_an_error if x.errors[field] 
    end 
end 
0

가장 좋은 방법은 상태 시스템을 사용하고 양식의 다양한 단계 사이에 데이터를 데이터베이스에 저장하는 것입니다.

예 : validates_presence_of :username, :if => proc {|u| u.signup_step >= 2 }, 여기서 signup_step은 데이터베이스의 정수 열입니다.

그래서 양식 사이에 데이터베이스에 저장하지 않으려는 경우에도 반드시해야한다고 생각합니다. 이렇게하면, 심한 해킹없이 정기적 인 검증과 모델을 사용할 수 있습니다. 그리고 솔직히, 나는 이런 식으로하는 것이 문제라는 것을 의심합니다.

+0

매우 멋진! 나는이 기회를 줄 것이라고 생각한다 ... 그리고 나는 이미 세션에 DB를 저장하고있다. 나는 더 명확해야한다고 생각한다 - 나는 ActiveRecord 객체로서 db에 그것을 저장하지 않는다. 특정 단계. 감사합니다. – user94154