0

Active Merchant 統合ビデオ Railscast #145 で Ryan Bates のビデオを見ていましたが、私の質問は、彼が Order.rb メソッド内で定義する @credit_card メソッドの作成に関するものでした。

def credit_card
  @credit_card||=ActiveMerchant::Billing::CreditCard.new(
    :type=>card_type,
    :number=>card_number,
    :verification_value=>card_verification,
    :month=>card_expires_on.month,
    :year=>card_expires_on.year,
    :first_name=>first_name,
    :last_name=>last_name
  )

終わり

私が従わないのは、このメソッドがどのように呼び出されるかです。新しいメソッドの form_for は @order オブジェクトを作成しますが、 credit_card メソッドについては言及されていません。@credit_card オブジェクトの作成を開始するために credit_card メソッドを呼び出す方法を教えてください。

仮想属性については知っていますが、credit_card メソッドが実際にどのように呼び出されるかはわかりません。

4

1 に答える 1

1

こちらのスクリーンキャストコードを見てください。

app/views/orders/new.html.erb で

注文フォームが表示され、最初の行から

<% form_for @order do |f| %>

送信時に、フォームが oders_controller create メソッドを使用していることがわかります。

app/controller/orders_controller.rb 内

    def create
      @order = current_cart.build_order(params[:order])
      @order.ip_address = request.remote_ip

      if @order.save
        if @order.purchase
          render :action => "success"
        else
          render :action => "failure"
        end
      else
        render :action => 'new'
      end
    end

@order は、カートから構築された Order インスタンスであることがわかります。ここには特別なことはありません この注文は保存さ@order.saveれ、 @order で購入方法が呼び出されます

この購入方法を見てみましょう!

app/model/order.rb で

    def purchase
      response = GATEWAY.purchase(price_in_cents, credit_card, purchase_options)
      transactions.create!(:action => "purchase", :amount => price_in_cents, :response => response)
      cart.update_attribute(:purchased_at, Time.now) if response.success?
      response.success?
    end

二行目response = GATEWAY.purchase(price_in_cents, credit_card, purchase_options) 。そこで GATEWAY.purchase の引数として credit_card メソッドを呼び出します。

于 2009-11-08T19:18:22.990 に答える