Ruby on rails 关于在Ryan bates活动商户整合视频上创建信用卡对象的问题

Ruby on rails 关于在Ryan bates活动商户整合视频上创建信用卡对象的问题,ruby-on-rails,paypal,activemerchant,Ruby On Rails,Paypal,Activemerchant,我正在浏览Ryan Bates关于活动商户集成视频Railscast#145的视频,我的问题是关于创建@credit#u card方法的问题,他在Order.rb方法中定义了该方法 def credit_card @credit_card||=ActiveMerchant::Billing::CreditCard.new( :type=>card_type, :number=>card_number, :verification_value=>car

我正在浏览Ryan Bates关于活动商户集成视频Railscast#145的视频,我的问题是关于创建@credit#u card方法的问题,他在Order.rb方法中定义了该方法

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
  )
结束

我不明白的是这个方法是如何被调用的。新方法中的表单_创建了@order对象,而没有提到credit_card方法。如何调用credit_card方法来启动@credit_card对象的创建


我知道虚拟属性,但我不知道信用卡方法实际上是如何调用的。

查看屏幕播放代码

应用程序内/views/orders/new.html.erb

    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
    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
我们可以看到订单,从第一行开始

<% form_for @order do |f| %>
我们可以看到@order是从购物车构建的order实例。这里没什么特别的 此订单现在与
@order一起保存。保存
,然后在@order上调用购买方法

让我们来看看这种购买方式

应用程序内/型号/订单.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
    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(价格、信用卡、购买选项)

。信用卡方法被称为GATEWAY.purchase的一个参数,我想我刚刚解决了这个问题。很抱歉。