3

모델의 인스턴스를 유효하지 않게하려는 매우 특정한 상황이 있습니다. 이 같은rails : 유효하지 않은 모델 강제

뭔가 :

user = User.new 
user.valid? #true 
user.make_not_valid! 
user.valid? #false 

그것을 달성하기 위해 어떤 방법?

감사합니다.

답변

6

당신은 할 수 있습니다 :

validate :forced_to_be_invalid 

def make_not_valid! 
    @not_valid = true 
end 

private 

def forced_to_be_invalid 
    errors.add(:base, 'has been forced to be invalid') if @not_valid 
end 
+1

브릴리언트을! 이 사람에게 맥주를 사주세요! – bymannan

+0

이것은 좋지만 인스턴스가 아닌 전체 클래스를 무효화합니다. @broisatse가 그의 코드보다 << 클래스를 의미하지 않는다면. – jforberg

+1

@jforberg -'@ not_valid'는 인스턴스 변수이므로 주어진 인스턴스를 무효로 만듭니다. – BroiSatse

0

내가 테스트를 위해 유용하다고 또 다른 변형 :

invalid_instance = MyModel.new 
class << invalid_instance 
    validate{ errors.add_to_base 'invalid' } 
end