undefined局部变量或方法`current_order'

时间:2014-04-03 14:41:26

标签: ruby-on-rails ruby-on-rails-3

我使用:

创建了一个名为PaypalOrder的新模型
rails generate model order_id:integer ip_address:string first_name:string last_name:string card_type:string card_expires_on:date

然后我跑了rake db:migrate

现在我的订单模型如下:

class PaypalOrder < ActiveRecord::Base
  belongs_to :order

  attr_accessor :card_number, :card_verification

  validate :validate_card, :on => :create

  def purchase
  #code
  end

  private
  def validate_card
  #code
  end

  def credit_card
  #code
  end

end

和我创建的控制器:

class PaypalOrdersController < ApplicationController

  def new
    @paypal_order = PaypalOrder.new
  end

  def create
    @paypal_order = current_order.build_paypal_order(params[:paypal_order])
    if @paypal_order.save
      # ...
    else
      render :action => "new"
    end
  end
end

但我收到以下错误:

NameError in PaypalOrdersController#create

undefined local variable or method `current_order' for #<PaypalOrdersController:0xf7b0a34>

为什么我无法访问current_order以及如何成功构建paypal_order

编辑:进行了以下更改:

class PaypalOrdersController < Spree::BaseController

现在工作正常!!

3 个答案:

答案 0 :(得分:0)

为什么不将控制器的第8行更改为:

@paypal_order = PaypalOrder.new(params[:paypal_order])

如果是Rails 4,你将不得不这样做:

@paypal_order = PaypalOrder.new(params.require(:paypal_order).permit!)

答案 1 :(得分:0)

根据错误,current_order方法不存在。

在调用之前,您需要首先创建current_order方法

答案 2 :(得分:0)

我假设你对current_order的意图是重用新动作实例化的命令......

由于实例变量不会通过多个请求生存,因此您需要再次实例化paypalorder。

@paypal_order = PaypalOrder.new(params[:paypal_order])
enter code here