2011-10-30 3 views
9

validates 유효성 확인을위한 :on 옵션에 대해 여러 항목을 포함 할 수 있습니까? 다음과 같은레일즈 유효성 검사 ... multiple : on 옵션?

뭔가 :

class Library < ActiveRecord::Base 

    validates :presence => true, :on => [:create, :update, :some_other_action] 

end 

은 기본적으로 내가 여러 조치가 컨트롤러에 호출 될 때 특정 유효성 검사를 실행하고 싶습니다. 예를 들어, create 작업, update 작업, 및 일부 다른 작업에 대한 일부 사용자 정보의 유효성을 검사하고 싶습니다.

모든 방법에 대해 유효성 검사를 실행하고 싶지는 않지만.

또한이 작업을 수행하는 더 쉬운 방법이 있다면 너무 좋을 것입니다.

미리 감사드립니다.

답변

5

예! 작성 및 업데이트하십시오!

: on - 유효성 검사가 활성화되는시기를 지정합니다. 기본 (전무) 모든 검증 컨텍스트에서 실행은, 다른 옵션 있습니다 : 컨트롤러 액션 레일 데이터베이스 데이터를 만들거나 업데이트 문으로

그러나이 값을 생각 업데이트하지 : 및 을 만들 수 있습니다. 그들은 데이터와 데이터베이스와 비슷한 일을하고있을 수도 있지만 그것들은 다릅니다.
예를 들어 다른 필드를 업데이트하는 데이터베이스를 업데이트하는 다른 레일스 메서드가있을 수 있습니다. 위의 ': update'는 'update'라는 이름의 레일스 액션에서 가져 오지는 않았지만 해당 메서드를 여전히 고려합니다.

+0

은 실제로 사용자 정의 유효성 검사 컨텍스트를 사용할 수있는 컨트롤러의 사실 확인에

.[: on -이 검증이 활성화 된 컨텍스트를 지정합니다 (예 : : create 또는 on : : custom_validation_context)]] (http://api.rubyonrails.org/classes/ActiveModel/Validations/ClassMethods.html#method- i-validates). 그런 다음'#valid? (: my_context)'또는'#save (context :: my_context) '를 사용할 수 있습니다. 불행하게도 한번에 여러 문맥을 정의 할 수있는 방법이 없습니다 ('on :'을 사용하거나'#valid? '에 배열 (또는 여러 개의 매개 변수)를 넘기는 것은 아닙니다). –

2

이것은 불가능합니다. 왜? 이 :on 이벤트는 컨트롤러 내부 액션 이름 아니지만, 미리 정의 된 액티브 (모델) 이벤트, :create 또는 :update 또는

제어 방법 및 모델 방법 사이에 자동 연결이 없습니다 :save.

0

내가 특정 컨트롤러 액션에 대한 유효성 검사를 건너 뛰도록했다 매우 유사한 문제가, 내가 위의 방법을 시도했지만 내 문제는 다른 어렸을했다 그래서 그들은 나를 위해 일하지 않았다. 그래서 나는 attr_accessor와 unless 설정을 사용했다.

문제없이 원활하게 작동합니다. 모델

validates :password, presence: true, unless: :skip_password_validation 

attr_accessor :skip_password_validation 

내가 검증을 필요로하지 않는 경우 상황이 올 때, 난 그냥

@user = User.find(params[:id]) 
@user.skip_password_validation = true 
관련 문제