2014-10-16 2 views
1

프로젝트에 state_machine gem을 사용하려고하지만 Rails 3.1 응용 프로그램에서 이벤트를 호출하는 방법이 고착됩니다.Rails 응용 프로그램에서 state_machine gem을 사용하여 이벤트를 트리거하는 방법

vehicle = Vehicle.create # => #<Vehicle id=1 state="parked"> 
vehicle.ignite    # => true 
vehicle.state 

하지만 어떻게 내가의 상태를 변경하는 것이 나에게 다음과 같은 옵션을 제공하는 것이,

class Vehicle < ActiveRecord::Base 
    state_machine :initial => :parked do 
    event :ignite do 
     transition :parked => :idling 
    end 
    end 
end 

그리고 이해 :

나는 아래와 같은 state_machine를 설정하는 방법을 이해 Rails 애플리케이션의 차량? vehicles.ignite가 컨트롤러에서 호출됩니까? 또는 before_save 메서드에 있습니까? 엔진 점화를위한 특별한 경로로 AJAX 호출이있는 페이지에 버튼이 있습니까?

앱이 어떻게 점화 방식을 호출하는 것을 알고 있습니까? 나는이 게시물에 점화한다 있는지 확인하는 플래그의 몇 가지 유형을 통과해야합니까 (즉, attr_accessor : mark_as_ignited 또는이 점화 메서드를 호출 알고 다른 변수에 따라

, 당신을 감사

답변

0

당신 전환 한 상태에서 다른 상태로 A를 해당 이벤트의 이름을 호출하여! 당신이 그것을 호출 할 때 알게 될 것입니다 방법에 관해서는

vehicle.ignite! 

의 컨트롤러에서 가능한 경로가.이 같은 간단한 될 수 설정 것을 다음과 같은 .

def ignite 
    @vehicle = Vehicle.find params[:id] 
    @vehicle.ignite! 
    render :show 
end 

라우트 파일에 필요한 멤버 끝점을 설정하고 필요한 링크가 있으면 필요한 링크를 넣어야합니다.

+0

답장을 보내 주셔서 감사합니다. 그게 내가 생각하고 있었던 것. 각 이벤트마다 별도의 경로를 하나씩 사용하는 것이 좋을지, 아니면 하나의 라우트가 "update_status"라고 한 다음 호출 할 이벤트를 트리거하는 매개 변수를 전달 하시겠습니까? –

+0

나는 SRP (single responsibility principle)를 따르고 모든 것을 하나로 묶어 놓는 경향이있다. – Robert

+1

도움을 주셔서 감사합니다. –

관련 문제