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

Ruby on rails 4 在保存rails 4之前调用另一个控制器中的对象,ruby-on-rails-4,controller,mongoid,Ruby On Rails 4,Controller,Mongoid,我有一个对象叫做reportapproval。我启动一个窗体中的对象,在保存它之前,我希望它通过充电控制器。如果充电未通过,则不会保存该对象,但如果充电通过,则会保存该对象 我正在尝试将未保存的对象传递给电荷控制器。我怎样才能做到这一点。以下是各自控制器中的两个操作 reportapproval\u controller.rb def create @reportapproval = current_manager.reportapprovals.new(authorizatio

我有一个对象叫做reportapproval。我启动一个窗体中的对象,在保存它之前,我希望它通过充电控制器。如果充电未通过,则不会保存该对象,但如果充电通过,则会保存该对象

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

reportapproval\u 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
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
充电控制器.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
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
如何将此对象传递给费用,然后在保存到DB之前返回到reportapproval。我正在使用mongoid顺便说一句。
提前谢谢。

你可以,但你不应该那样做。使用标志保存Reportapproval,以指示尚未付款。在执行条带化过程后,删除标志以允许用户完全访问


顺便说一句,这也将帮助您了解是否以及有多少用户在条带处理过程中停止,不再回来。

那么,您所说的标志是指bollean还是类似日期时间戳的东西,如果费用从未通过,怎么取消报告审批?布尔值,是的。就我个人而言,我不会取消或删除它们,我只会确保控制器方法不会访问未经批准的方法。最后谢谢。布尔值是否优于使用状态机,反之亦然。一种方法比另一种好吗?如果只有两个状态,则使用布尔值,对于其他情况,状态机通常更好。