2017-10-15 18 views
0

에 매개 변수를 전달합니다. 나는 아래 사건이있다. 이것이 않는 것은 order_created에서 payment_response_received으로 상태를 변경합니다. 그래서 이것을 변경 한 후에는 verify_payment_response(data) 메서드를 호출하고 싶습니다. 나는 @booking.move_to_payment_response_received!를 호출하여이 상태 변경을 할 수 있지만, 어떻게 콜백 이후에 사용하기 위해 매개 변수를 전달할 수 있습니다?내가 aasm 상태 기를 사용하고 aasm 이벤트

event :move_to_payment_response_received do 
    after_commit do 
     self.verify_payment_response(data) #How can I pass this data param from my controller 
    end 
    transitions from: :order_created, to: :payment_response_received 
end 
+0

는 검증의 시점 무엇입니까 커밋 후 상태 머신의 데이터? 데이터가 유효하지 않더라도 이벤트가 시작되었습니다. 이벤트가 발생하기 전에 또는 이벤트가 발생하는 동안 유효성 검사의 일부로 데이터를 확인해야합니까? 컨트롤러 메소드와'verify_payment_response' 메소드도 함께 보여주십시오. – spickermann

+0

@spickermann 2 개의 출처에서 payment_response를 받았습니다. 하나는 클라이언트 브라우저 js이고 다른 하나는 webgook에서 직접 가져온 것입니다. 그래서 둘 다 나는 아무런 통제력이 없다. 나는'verify_payment_response (data)'만을 한 번만 호출하기를 원한다. 그래서 어떤 응답이 먼저 오는지는'verify_payment_response (data)'에 사용됩니다. 또한 서명 유효성 검사는'verify_payment_response' 방법은 API 호출 (백그라운드 작업자가) 직접 상태를 확인 payment_gateway 할 수 있습니다 어떤 이유로 실패하는 경우. 그래서 두 번 이런 일이 발생을 방지하기 위해 단지 booking.move_to_payment_response_received @!''if' 절에이은'있습니다 .. verify_payment_response는이 방법으로 호출 할 수있는 컨트롤러 @spickermann payment_response_received 상태 – Abhilash

+0

을 추가했습니다. (은 webhook 및 게시 요청을에서 클라이언트 브라우저에서 js). 나는 어느 것이 먼저 불릴 지 모릅니다. 그러나 이제까지 어느 것이 먼저 오는지 나는 그것을 사용하고 싶다. 그래서 상태 변경은 verify_payment_response 다시 실패합니다 두 번째 및 못해 전화를 payment_response_received 및이 방법의 의도를 이잖아하는 경우. – Abhilash

답변

1

당신은 이벤트 발사하기 전에 로컬 변수에 data을 할당 할 수 있습니다 :

# in your model 

attr_accessor :payment_response_data 

event :move_to_payment_response_received, :after_commit => :verify_payment_response do 
    transitions from: :order_created, to: :payment_response_received 
end 

private 

def verify_payment_response 
    data = payment_response_data 

    # already existing code to verify `data` 
end 

을 그리고이 같은 컨트롤러에서 이것을 사용

@booking.payment_response_data = data 
@booking.move_to_payment_response_received! 
+0

감사합니다. 일했다. 나는 아아 강의 길이있을 거라 생각해서이 접근법에 대해 생각하지 않았다. :) – Abhilash