Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在状态机转换后发送电子邮件_Ruby On Rails - Fatal编程技术网

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

Ruby on rails 在状态机转换后发送电子邮件,ruby-on-rails,Ruby On Rails,我正在尝试使用Rails 4.1构建一个小型费用跟踪应用程序。当用户提交费用申请时,其状态默认标记为挂起。管理员必须批准该请求。我用状态机gem来做这个 我想在请求被批准或拒绝后发送一封电子邮件,我尝试了以下模型方法: state_machine initial: :pending do state :pending state :approved state :rejected #after_transition :on =>

我正在尝试使用Rails 4.1构建一个小型费用跟踪应用程序。当用户提交费用申请时,其状态默认标记为挂起。管理员必须批准该请求。我用状态机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的方式,但是,它正在工作