Я предполагаю, что, поскольку проверка на спам происходит непосредственно перед установкой начального состояния, ваши переходы: spam и: ham не могут быть выполнены, поскольку условие: from говорит о том, что состояние должно быть: submit,: отклонено или: одобрено (но на самом деле это ноль). Начальное состояние устанавливается на before_validation_on_create
обратный вызов, так как насчет того, чтобы попробовать это так?
after_validation_on_create :spam_check
aasm_event :spam_check do
transitions :to => :approved, :from => [:submitted, :rejected], :guard => Proc.new {|c| !c.spam?}
transitions :to => :rejected, :from => [:submitted, :approved], :guard => 'spam?'
end
def spam?
# your spam checking routine
end
Это должно вызвать событие spam_check
после установки initial_state
и установить состояние ste в :approved
или: rejected
.