
我正在学习《敏捷开发》这本书之后的ruby on rails。我做的最后一件事是创建Checkout部件:

我向控制器添加了操作,并为模型的实例变量添加了方法。一切都在按预期进行,...在一定程度上。
当我插入name、address、emailaddress和pay type等值时,我收到一个错误通知,说“项目无效”。
一些验证测试可能写错了。有谁知道哪里会出问题吗?
class Order < ActiveRecord::Base
has_many :line_items, dependent: :destroy
PAYMENT_TYPES = [ "Check", "Credit Card", "Purchase order"]
validates :name, :address, :email, presence: true
validates :pay_type, inclusion: PAYMENT_TYPES
def add_line_items_from_cart(cart)
cart.line_items.each do |item|
item.cart_id = nil
line_items << item
end
end
end控制器
def new
if @cart.line_items.empty?
redirect_to store_url, notice: "Your cart is empty"
return
end
@order = Order.new
end
# GET /orders/1/edit
def edit
end
# POST /orders
# POST /orders.json
def create
@order = Order.new(order_params)
@order.add_line_items_from_cart(@cart)
respond_to do |format|
if @order.save
Cart.destroy(session[:cart_id])
session[:cart_id] = nil
format.html { redirect_to store_url, 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固定装置
one:
product_id: ruby
cart_id: one
two:
product_id: ruby
cart_id: one这是我的github帐户https://github.com/KerstinKee/depot
发布于 2014-11-18 06:19:40
您有两个验证。如果您真的传递了姓名、地址和电子邮件,则第二次验证将失败。
validates :pay_type, inclusion: PAYMENT_TYPES你会选择什么pay_type?
您可以通过以下方式获取验证错误:
object.errors.messages祝好运!
发布于 2015-06-16 05:03:52
我将查看用于将产品添加到购物车的代码,验证看起来是正确的,模型定义了业务规则,对象之间的关系(由控制器定义的每个对象在数据库中都有一个表(行))。
如果您的代码的一部分在另一个对象(表行条目)被保存之前删除了另一个对象(表行),这将破坏数据库中的关系,这也是一个验证错误,在我的例子中,我在order save命令之后在它自己的救援块中执行了一个费用(这个命令的第一部分删除了cart对象),代码的条带费用行指示了订单保存的时间,这导致了错误"invalid line items",一旦将收费代码放在@order.save之前,并在单个begin救援块中保存订单,就不会出现错误link
https://stackoverflow.com/questions/26982415
复制相似问题