4

난 내 레일 4 응용 프로그램에서 aasm (이전 acts_as_state_machine) 보석을 사용하고 있습니다. 내 Post 모델에 이런 일이인수가있는 콜백 후 aasm

... 
    aasm column: :state do 
    state :pending_approval, initial: true 
    state :active 
    state :pending_removal 

    event :accept_approval, :after => Proc.new { |user| binding.pry } do 
     transitions from: :pending_approval, to: :active 
    end 
    end 
    ... 

내가 @post.accept_approval!(:active, current_user)를 호출하고 콜백이 트리거 도착 후, 내 콘솔 내가 user이다 (즉, PROC로 전달)하고 nil을 무엇을 검사 할 수 있습니다!

여기 무슨 일 이니? 이 전환을 호출하는 올바른 방법은 무엇입니까?

+0

왜 버려진 보석을 골랐습니까? 그런데 전이에는 일반적으로 아무런 논점이 없습니다. – apneadiving

+0

보석이 방금 업데이트되었으므로 당신이 무슨 뜻인지 잘 모르겠습니다. 또한 README에 따르면 이것이 가능함을 나타내는 –

+0

은 다른 버전이었습니다. 인기있는 이름 인 것 같습니다. – apneadiving

답변

1

는 현재 버전 (4.3.0)에서 작동합니다

event :finish do 
    before do |user| 
    # do something with user 
    end 

    transitions from: :active, to: :finished 
end 
3

섹션 콜백에서 aasm 문서를보십시오.

... 
    aasm column: :state do 
    state :pending_approval, initial: true 
    state :active 
    state :pending_removal 

    after_all_transition :log_all_events 

    event :accept_approval, after: :log_approval do 
     transitions from: :pending_approval, to: :active 
    end 
    end 
    ... 
    del log_all_events(user) 
    logger.debug "aasm #{aasm.current_event} from #{user}" 
    end 

    def log_approval(user) 
    logger.debug "aasm log_aproove from #{user}" 
    end 

당신은 필요한 PARAMS와 이벤트를 호출 할 수 있습니다 : 전환 성공 후 호출 될 것입니다 방법을 쾅하는

@post.accept_approval! current_user 
0
event :accept_approval do 
    transitions from: :pending_approval, to: :active 
end 

post.accept_approval!{post.set_approvaler(current_user)}

블록을, 모든 액티브 작업하는 경우, 그것은 포장 될 것이다 전환 트랜잭션으로, 옵션으로 동시성 문제를 방지하기 위해 잠금을 요구할 수 있습니다. requires_lock: true.