Здесь немного по другому сделано. @agreement.state_events вернет нам (accept reject update_by_worker update_by_manager cancel). А переходы update_by_worker update_by_manager выполняются автоматически после того как пользователь изменит Соглашение в зависимости от того кем он является в соглашении. 
if can? event_name.to_sym нужен потому что state_machine не учитывает роль пользователя во время переходов. Работник например никогда не может отменить Соглашение