2016-03-13 2 views
1

У меня есть объект, называемый reportapproval. Я запускаю объект в форме и до того, как он будет сохранен, я хочу, чтобы он прошел через контроллер заряда. Если заряд не пройдет, то он не сохранит объект, но если он это сделает, он сохранит.вызов объекта в другом контроллере перед сохранением рельсов 4

Я пытаюсь передать несохраненный объект контроллеру заряда. Как я могу это сделать. Вот 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 

Как я могу передать этот объект заряда, а затем обратно в reportapproval перед сохранением в БД. Я использую mongoid btw. Спасибо заранее.

ответ

1

Вы можете, но не должны этого делать. Сохраните параметр Reportapproval с флагом, чтобы указать, что он еще не оплачен. После прохождения процедуры Stripe удалите флаг, чтобы разрешить пользователю полный доступ.

Btw, это также поможет вам узнать, сколько человек останавливается во время процедуры Stripe и не возвращаться снова.

+0

Итак, по флагом вы имеете в виду болелеан или что-то вроде отметки времени даты, и как насчет того, если заряд никогда не пройдет, как отменить одобрение отчета? – SupremeA

+0

Boolean, да. Лично я бы не отменял или не удалял их, я бы просто удостоверился, что методы контроллера не имеют доступа к не утвержденным. –

+0

Спасибо, последнее. Является ли логическое лучше, чем петь государственную машину или наоборот. Один путь лучше, чем другой? – SupremeA

Смежные вопросы