在保存rails 4之前调用另一个控制器中的对象

时间:2016-03-13 05:30:16

标签: ruby-on-rails-4 controller mongoid

我有一个名为reportapproval的对象。我以一种形式启动对象,在保存之前,我希望它通过一个充电控制器。如果电荷没有通过那么它不会保存对象,但如果它没有,那么它将保存。

我正在尝试将未保存的对象传递给充电控制器。我怎样才能做到这一点。以下是各自控制器中的2个动作。

reportapproval_controller.rb

def create
        @reportapproval = current_manager.reportapprovals.new(authorization_params)
          if @reportapproval.valid?
            if @reportapproval.manager_paying_report == true
              flash[:notice] = "Please make payment before proceeding"
              redirect_to new_managers_charge_path(id: @reportapproval_id)
              charge_error = nil
            end
          end
end

charge_controller.rb

def create
    # Amount in cents
    @reportapproval = Reportapproval.new(session[:reportapproval_id])
    @manager = current_manager
    @amount = @reportapproval.manager_request_report_type

    customer = Stripe::Customer.create(
      :email => @manager.email,
      :card  => params[:stripeToken]
     )

    charge = Stripe::Charge.create(
       :customer    => customer.id,
    ...
    )
     @reportapproval.report_paid = true
     @reportapproval.save!
     redirect_to managers_dashboard_path, :notice => "You have successfully ..."

    rescue Stripe::CardError => e
      flash[:error] = e.message
      redirect_to managers_charges_path
    end 
end

如何在保存到数据库之前将此对象传递给费用,然后返回到报告批准。我正在使用mongoid btw。 提前谢谢。

1 个答案:

答案 0 :(得分:1)

你可以但你不应该这样做。使用标记保存Reportapproval以指示尚未支付。在Stripe过程完成后删除标志以允许用户完全访问。

顺便说一句,这也可以帮助您了解更多用户以及有多少用户在Stripe程序中停止并且不再回来。