2017-11-08 6 views
1

AASM을 사용하여 내 사용자 모델의 상태를 관리하고 있습니다.편집 작업으로 AASM 상태 변경

편집 작업을 통해 상태를 변경하고 싶습니다.

이렇게하려면 내 양식 에 User.aasm_states_for_select 메서드를 사용하여 상태에 대한 선택 입력을 채 웁니다. 버튼 커밋을 실행하면 상태 이름을 포함하여 모든 변경 사항이 저장됩니다. 그러나 해당 상태에 대한 AASM 이벤트는 호출되지 않고 필드 상태가 변경되고 이벤트 방법 이 호출되지 않았기 때문에 이 발생합니다.

누구에게도 내 문제에 대한 해결책이 있습니까?

답변

2

유일한 해결책은 상태 이름에서 이벤트를 찾아서 직접 적용하는 것입니다.

STATE_MAPPING = { 
    'state_name' => :event_name 
} 

#... 

def update 
    user.public_send(state_event) if state_event 
    user.update permitted_attributes 

    #... 
end 

# ... 

def state_event 
    state = params.require(:user).permit(:state) 
    STATE_MAPPING[state] 
end 

def permitted_attributes 
    @params.require(:user).permit #attributes without state 
end 

너무 많은 허슬 같은 뭔가 TBH,하지만 내 지식 나는이에 대한 state_machine 보석을 사용한다

+0

가능한 다른 해결책은 없다? –

+0

@MihirKumarThakur 나는 아아 무스가 더 좋다고 믿는다. 적어도 내가했던 프로젝트에서'state_machine'은 그 때까지 유지 관리가 잘되어'aasm'으로 바뀌 었습니다. –