nil的未定义方法`each':NilClass(ActiveMerchant)

时间:2017-06-10 00:04:47

标签: ruby-on-rails-5 activemerchant

在填写付款信息后,当我点击“下单”时,我收到此错误

  
    

OrdersController中的NoMethodError #create

         

未定义的方法`each'代表nil:NilClass

  

OrdersController

def create
 @order = Order.new(order_params)
 @order.add_line_items_from_cart(@cart)
 credit_card = ActiveMerchant::Billing::CreditCard.new(params[:credit_card])

 respond_to do |format|
  if @order.save
    Cart.destroy(session[:cart_id])
    session[:cart_id] = nil
    format.html { redirect_to category_url(Category.first), notice: 'Thank you for your order.' }
    format.json { render :show, status: :created, location: @order }
  else
    format.html { render :new }
    format.json { render json: @order.errors, status: :unprocessable_entity }
  end
 end
end

订单型号:

attr_accessor :card_no, :card_cvv, :expiry_date

我猜我需要分组:card_no,:card_cvv和:expiry_date在标有'credit_card'的数据结构中,但我不知道如何。谢谢!

编辑:

  
    

NoMethodError(未定义的方法`每个'为nil:NilClass):

         

app / controllers / orders_controller.rb:32:在'new'

中          

app / controllers / orders_controller.rb:32:在'create'

中          

渲染C:/RailsInstaller/Ruby2.2.0/lib/ruby /........

  

1 个答案:

答案 0 :(得分:0)

你需要根据你从表单发送的内容获取参数,因此,如果你想访问它们,你必须从order根获取参数,也就是说,{ {1}}将是card_no,这就是所有这些。

为了使用ActiveMerchant gem并创建一个新的“CreditCard”,你需要传递从表单中收到的值,如:

params[:order][:card_no]