рельсы 3 получают данные из ассоциации и отображают во флэш-сообщении - PullRequest
2 голосов
/ 26 сентября 2011

Я использую ActiveMerchant с Authorize.net и уже настроил 2 модели Order and Transaction. (http://railscasts.com/episodes/145-integrating-active-merchant)

Я хотел бы получить сообщение об ошибке из транзакции, если произошла ошибка, а затем вывести во флэш-сообщение. Вот мой код:

#order_controller.rb

  def create
    @order = Order.new(params[:order])

    respond_to do |format|
      if @order.save
        if @order.purchase
          format.html { redirect_to(@order, :notice => 'Order was successfully created.') }
          format.xml  { render :xml => @order, :status => :created, :location => @order }
        else  
          flash[:error] = @order.transactions.response
          format.html { render :action => "new" }
        end 
      else  
        format.html { render :action => "new" }
        format.xml  { render :xml => @order.errors, :status => :unprocessable_entity }
      end
    end
  end

А вот моя модель транзакции:

#models/order_transaction.rb
class OrderTransaction < ActiveRecord::Base
  belongs_to :order
  serialize :params

  def response=(response)
    self.success       = response.success?
    self.authorization = response.authorization
    self.message       = response.message
    self.params        = response.params
  rescue ActiveMerchant::ActiveMerchantError => e
    self.success       = false
    self.authorization = nil
    self.message       = e.message
    self.params        = {}
  end
end

Данные транзакции были сохранены в базе данных, как показано ниже:

#models/order.rb
class Order < ActiveRecord::Base
  has_many :transactions, :class_name => "OrderTransaction"
  attr_accessor :card_type, :card_number, :card_month, :card_year, :card_verification

  def purchase
      response = GATEWAY.purchase(charge_amount, credit_card, purchase_options)
      transactions.create!(:action => "purchase", :amount => charge_amount, :response => response)
      response.success?
  end


...
end

Я хочу высветить это сообщение об ошибке транзакции при сбое транзакции. И что я должен сделать, чтобы получить эти ошибки, если у меня есть 2 транзакции для одного заказа .?

Любая помощь будет высоко ценится.

Спасибо!

...