In Memory로 state machine의 statesman을 사용해 보도록 하겠습니다.
6171 단어 RailsRubyStateMachinetech
statesman을 사용해 봤어요.
rails에서 state machinestatesman를 원해서 썼어요.
왜냐면ruby toolbox 그럼statemachines의 클래스에 들어가지 않았습니다. 자주 사용하고 유지보수도 지속됩니다.
(ruby 오랜만이에요. 이제 루비 toolbox도 잘 안 쓰죠)
In Memory로 이동
statesman의 특징은 state machine의class와 이전 역사를 저장하는transsitionclass와 모델을 분리해서 제작하는 것이 기본적인 부분이죠.
state machine도 모델에 함부로 자란 것이 아니라 스스로 정의하고 넣은 것이기 때문에 다양한 기능을 함부로 추가하는 것이 아니라 놀라지 않는다.
액티비티 같은 모델이 있다면 state machine로 제작된 반
include Statesman::Machine
, 모델에서 제작state_machine
방법으로 거기에 state machine의 실례를 설정하면 먼저 움직인다.class Activity < ApplicationRecord
def state_machine
@state_machine ||= ActivityStateMachine.new(self)
end
end
class ActivityStateMachine
include Statesman::Machine
state :pending, initial: true
state :done
transition from: :pending, to: :done
end
이렇게 호출state_machine
사용> activity = Activity.new
> activity.state_machine.current_state?
=> "pending"
> activity.state_machine.can_transition_to?(:done)
=> true
> activity.state_machine.transition_to!(:done)
=> true
# 状態遷移が出来ました
> activity.state_machine.current_state
=> "done"
대체로 이런 상태의 관리는 DB를 사용하지 않고 In Memory를 사용해서 하지만 기본적으로 상태 이동의 기록을 지정하는transsition class로 하는 것이 평소의 용례에 더 적합할 수 있다.어쨌든 이렇게 되면 Activity 모델의 상태를 저장할 수 없습니다> activity.save
# ここで保存した activity をロードしなおしたとすると
> activity2 = Activity.last
# 状態を確認すると initial state に戻ってしまってます
> activity2.state_machine.current_state
=> "pending"
(기본) RDB 사용 상태 저장
transition class를 만들어 DB에 저장하면 된다.
이런 방법은 README의 방법입니다. 상세한 상황은 참고해 주십시오.
initializers/statesman.rb
도Active Record의 어댑터를 설정하고transion class를 만들며migration을 더하면 됩니다.rails g statesman:active_record_transition Activity ActivityTransition
단, 이것은 처음 이동했을 때의 기억일 뿐, 참고만 제공한다.제작된migration 파일은 미묘합니다. id의 관련으로 떨어질 수 있습니다.
rake db:rollback
도 index에서 삭제되었기 때문에 add_foreign_key
의 위치를 마지막으로 변경했습니다.# これを migration ファイルの最後に置いておくと、まず foreign_key が消えるので、他の add_index も rollback 可能になる
add_foreign_key :activity_transitions, :activities
(이해하기 어려운 설명일 수도 있어요. 안 돼요!)
Reference
이 문제에 관하여(In Memory로 state machine의 statesman을 사용해 보도록 하겠습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/kakkunpakkun/articles/859ee0b7c9c3522b9e1b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)