2017-02-02 1 views
2

before_validation 콜백에 일부 모델 데이터를 업데이트/수정하는 코드가 있습니다.Rails에서 before_validations를 건너 뛸 수 있습니까?

그러나 아직 모델이 정상인지 확인하기 위해 유효성 검사를 실행할 수 있기를 바랍니다.

좀 더 구체적으로 말하면 데이터베이스의 레코드가 유효한지 알고 싶습니다. 그래서 값을로드하고 .valid?에 응답에 영향을 미칠 콜백을 실행하지 않고도 요청할 수 있기를 바랍니다.

그래서,이 (그리고 약간의 변화)을 시도했지만 작동하지 않았다 :

skip_callback :validation, :before, unless: ->{self.changed?}

skip_callback에 대한 문서는 가난한, 그래서 내가 그것을 제대로 사용하고 확실하지 않다 . 이것이 작동하도록 만들 수 있습니까?

감사합니다.

+1

여기 http://apidock.com/rails/ActiveSupport/Callbacks/ClassMethods/skip_callback 예는'말합니다 :하지'validate' : validation', 즉 문제가 될 수 있을까? – Iceman

+0

@Iceman it'' : validation'. 이'Model._validation_callbacks'를 사용하여 모든'validation' 콜백을 찾을 수 있습니다. –

답변

1

APIDock에 따르면 skip_callback은 callback_name을 취하고 인수 (블록)는 *filter_lists입니다.

filter_list에는 콜백 메소드 이름이 포함되어야합니다. 이 아래처럼.

class User < ActiveRecord::Base 
    validates_presence_of :name 
    before_validation :set_name 

    skip_callback :validation, :before, :set_name, unless: -> { self.changed? } 

    def set_name 
    self.name ||= 'foobar' 
    end 
end 

#<User:0x007ffcd7165248 id: 2, name: nil, created_at: Fri, 03 Feb 2017 01:10:37 UTC +00:00, updated_at: Fri, 03 Feb 2017 01:10:37 UTC +00:00> 

User.find(2).valid? # returns false 

user = User.find(2) 
user.updated_at = Time.now 
user.valid? # returns true, because it invokes :set_name before validation 
+0

맞습니다. 모든 before_validations를 피할 방법이 없거나, lambdas를 통해 구현 된 무명 참조 무언가를 참조 할 수없는 것처럼 보입니다. 감사. – z5h

+0

@ z5h 모두 나열 할 수 있습니다. –

관련 문제