在填写付款信息后,当我点击“下单”时,我收到此错误
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 /........
答案 0 :(得分:0)
你需要根据你从表单发送的内容获取参数,因此,如果你想访问它们,你必须从order
根获取参数,也就是说,{ {1}}将是card_no
,这就是所有这些。
为了使用ActiveMerchant gem并创建一个新的“CreditCard”,你需要传递从表单中收到的值,如:
params[:order][:card_no]