4
state_machine gem을 사용하여 전환에서만 실행되는 유효성 검사를하고 싶습니다. 예를 들면 다음과 같습니다.state_machine 전환시 유효성 검사
# Configured elsewhere:
# StateMachine::Callback.bind_to_object = true
class Walrus > ActiveRecord::Base
state_machine :life_cycle, :initial => :fetus do
state :fetus
state :child
state :adult
state :dead
event :coming_of_age do
transition :child => :adult
end
before_transition :child => :adult do
validate :coming_of_age_party_in_the_future
end
end
end
성인용 상태에 첨부하면 해당 날짜가 지나면 실패합니다. 그러나 전환 과정에서 유효해야합니다. 다음과 같이 추가 할 수 있습니다.
validate :coming_of_age_party_in_the_future, if: 'adult? && life_cycle_was == "child"'
그러나 전환점을 놓친 것 같습니다.
또한 콜백 객체에서 바인딩하고 있으므로 조건부로 'validate'라고하는 클래스 메소드를 어떻게 호출할까요? 콜백의 많은 메소드가 private이기 때문에 바인딩이 필요합니다.
이러한 번호가 있으면 어떻게 될까요? 전이를 확인하려면 레일 유효성 검사기가 문제가되지 않습니까? 꽤 일반적인 사용 사례 인 것 같습니다. – Chris
기술적으로는 그렇지 않습니다. case 문에 중첩 된 모든 유효성 검사를 유지하는 하나의 메서드를 만들거나 언급 한대로 할 수 있지만 전환 자체를 금지하거나 금지하려는 것으로 가정하므로 'guarding'논리를 전환 - 가독성을 위해서만 사용하는 경우. – CMW
'그런 경우 전환을 확인하는 맞춤 메소드를 추가하는 것이 더 낫습니까? 'life_cycle_was == 'child'&& adult? '와 마찬가지로 – Chris