在状态机转换后发送电子邮件

我正在尝试使用Rails 4.1构建一个小费用跟踪应用程序。 当用户提交费用请求时,默认状态会将其标记为挂起。 管理员必须批准该请求。 我正在使用state_machine gem来做到这一点。

我想在请求被批准或拒绝后发送电子邮件,我尝试了以下模型方法:

state_machine initial: :pending do state :pending state :approved state :rejected #after_transition :on => :approved do |expense, transition| #expense.send_expense_approved_email #end #after_transition :on => :rejected do |expense, transition| #expense.send_expense_approved_email #end after_transition :on => :approved, :do => :send_expense_approved_email after_transition :on => :rejected, :do => :send_expense_declined_email event :approved do transition [:pending, :rejected] => :approved end event :rejected do transition [:pending, :approved] => :rejected end end def expense_amount items.to_a.sum { |item| item.amount } end def send_expense_approved_email ExpenseMailer.expense_approved(expense).deliver end def send_expense_declined_email ExpenseMailer.expense_declined(expense).deliver end end 

状态转换成功后,我无法触发电子邮件。 我已经在控制器操作中测试了邮件程序,它们被发送出去了。 我如何让它工作?

这些模型方法不起作用。 因此,使用if和else语句来检查状态,然后在更新操作中触发电子邮件。 不确定,如果这是Rails方式,但是,它正在工作。