【问题标题】:call object in another controller before save rails 4在保存rails 4之前在另一个控制器中调用对象
【发布时间】:2016-03-13 05:30:15
【问题描述】:

我有一个名为 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

如何将此对象传递给charge,然后在保存到数据库之前返回reportapproval。我正在使用 mongoid 顺便说一句。 提前致谢。

【问题讨论】:

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


    【解决方案1】:

    你可以,但你不应该那样做。保存带有标志的 Reportapproval 以表明尚未付款。在 Stripe 过程完成后,删除标志以允许用户完全访问。

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

    【讨论】:

    • 因此,您所说的标志是指布尔值还是日期时间戳之类的东西,如果费用从未通过,我该如何取消报告批准?
    • 布尔值,是的。我个人不会取消或删除它们,我只是确保控制器方法不会访问未经批准的方法。
    • 感谢最后一件事。布尔值是否比状态机更好,反之亦然。一种方式比另一种更好吗?
    • 如果您只有两个状态,则使用布尔值,对于其他情况,状态机通常更好。
    猜你喜欢
    • 1970-01-01
    • 2013-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-09
    • 2010-11-20
    • 1970-01-01
    相关资源
    最近更新 更多