나는 당신이 검증에 대한 아이디어를 오해하고 있다고 생각합니다. 유효성 검사는 컨트롤러 동작이 아닌 모델 (save
, create
또는 update
)을 통해 발생하므로 사용자의 경우 approved
동작이 유효성 검사를 트리거하는 것으로는 이해가되지 않습니다.
코드를 보면,이 모델이 이 approved
의 값이 단지의 true
(즉, 라인이 될 것을 조건으로, 업데이트 때 정말 cat_no
에 유효성 검사를 실행하고 싶은 것을 나에게 보인다 귀하의 approve
조치가 있으신 분은 @product.update_attribute :approved, true
입니다).
나는 코드가 아래 그 달성해야한다고 생각 :
validates :cat_no, :presence => true, :on => :update, :if => :just_approved?
def just_approved?
changed.include?("approved") && approved?
end
UPDATE :
돌이켜에서
, 위의 검증은 아마 당신이 실제로 원하는 것보다 더 관대하다. 승인 된 레코드가 있고 cat_no
을 nil
으로 변경하면 approved
이 변경되지 않았으므로 유효성이 검사됩니다 (changed.include?("approved")
은 false
으로 계산 됨). 그것은 분명하지 않지만, 당신이 경우 안 컨트롤러에서 액티브 레코드 유효성 검사를 사용하려고하는 것 같다
validates :cat_no, :presence => true, :on => :update, :if => :approved?
아,이 더욱 의미를. 이제 제안 된 코드를 사용해 보겠습니다. 많은 thanks – Raoot
문제 없어요, 그것이 작동하는 경우 알려 주시기 바랍니다. –
슬프게도 작동하지 않는 것 같습니다. Cat_no가 누락 된 제품에서 승인을 받도록 설정했습니다. – Raoot