:scope
대신 :if
옵션을 찾고 있습니다.
validates :approver_note, :presence => true,
:if => lambda { |invoice| invoice.state_id == 3 }
그러나 람다 조금 추한이기 때문에, 아마 당신이 더 조금 무슨 일을하는지 캡슐화하는 방법을 추가 할 것입니다 : 당신이 실제로 다른 속성의 무리가있는 경우
validates :approver_note, :presence => true, :if => :requires_note?
validates :po_number, :presence => true, :if => requires_po_number?
def requires_note?
state_id == 3
end
def requires_po_number?
state_id == 2
end
validates :approver_note, :presence => true, :if => :green_state?
validates :po_number, :presence => true, :if => orange_state?
def green_state?
state_id == 3
end
def orange_state?
state_id == 2
end
는 (함께 "녹색"교체 "high_documentation"또는 무엇 이건 - - 난 몰라 : state_id
3, 그냥 메모 때 요구되는, 당신은 이런 식으로 뭔가를 할 수 있습니다 .) 당신의 세계에
을 의미가 아니면이 상태가 무엇인지 결정하게하려면 :
def green_state?
state.green?
end
은 정말 당신의 실제에보다 밀접하게 코드를 부착합니다에서 용어를 만들기 위해 도움이 되나요 언어는 "3"과 "2"와 반대입니다.
+1 훌륭한 세부 정보 및 옵션. –
완벽한, 감사합니다! 나는 람다를 좋아하지 않기 때문에 두 번째 옵션을 사용했습니다. 그러나 올바른 유효성 검사 오류 메시지가 표시 되더라도 레코드는 계속 업데이트됩니다. 즉, 사용자가 po_number를 입력하지 않고 승인 (state_id = 2)을 선택하면 오류가 표시되지만 레코드는 여전히 invoice.state_id = 2 ...로 업데이트됩니다. –
흠, 그건 아마도 컨트롤러에서 별개의 문제로 들립니다. 유효성 검사가 실패하면 ActiveRecord가 저장되지 않습니다. 다른 질문으로 게시하고 컨트롤러 작업을 포함 할 수 있습니다. –