Вызов метода в начальном состоянии с AASM - PullRequest
1 голос
/ 10 февраля 2009

Можно ли вызвать метод при входе в начальное состояние при использовании AASM Gem? Мне бы хотелось, чтобы метод spam_check вызывался при отправке комментария, но, похоже, он не работает.

class Comment < ActiveRecord::Base
  include AASM

  aasm_column :state
  aasm_initial_state :submitted
  aasm_state :submitted, :enter => :spam_check
  aasm_state :approved
  aasm_state :rejected

  aasm_event :ham do
    transitions :to => :approved, :from => [:submitted, :rejected]
  end

  aasm_event :spam do
    transitions :to => :rejected, :from => [:submitted, :approved]
  end

  def spam_check
    # Mark the comment as spam or ham...
  end
end

Ответы [ 2 ]

1 голос
/ 11 февраля 2009

Я предполагаю, что, поскольку проверка на спам происходит непосредственно перед установкой начального состояния, ваши переходы: 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.

1 голос
/ 11 февраля 2009

Как насчет использования метода инициализации ?, он не так самодокументирован, но должен работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...