【问题标题】:Agile Web Development with rails 4 - Checkout - line items invalid使用 Rails 4 进行敏捷 Web 开发 - 结帐 - 行项目无效
【发布时间】:2015-06-16 05:03:51
【问题描述】:

我正在按照敏捷开发这本书学习 ruby​​ on rails。我做的最后一件事是,我创建了 Checkout 部分: 我将动作添加到控制器,以及模型实例变量的方法。一切都按预期工作,......在一定程度上。

当我插入姓名、地址、电子邮件地址和支付类型等值时,我收到一条错误通知,提示“项目无效”。

某些验证测试可能写错了。有人知道可能出了什么问题吗?

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

【问题讨论】:

  • Line items is invalid 表明此订单引用的订单项存在验证错误。同样根据Rails API docsvalidates :pay_type, inclusion: { in: PAYMENT_TYPES }} 应该是验证付款方式的正确语法。
  • 事实上,订单项有问题:如果我第一次点击“添加到购物车”按钮,它不会显示价格值,但如果我点击“第二次添加到购物车”按钮,它会显示价格值,如果我第三次和第四次点击“加入购物车”按钮也是如此。也许它与那个问题有关......我添加了一个截图。它不计算第一个订单项

标签: ruby-on-rails


【解决方案1】:

您有两个验证。如果你真的通过了姓名、地址和电子邮件,那么第二次验证失败。

validates :pay_type, inclusion: PAYMENT_TYPES

你选择什么pay_type?

您可以通过以下方式获取验证错误:

object.errors.messages

祝你好运!

【讨论】:

  • 您好 Stanislav,感谢您的评论:不幸的是,我不明白。我选择“支票”作为付款方式。我想我必须重写验证...
【解决方案2】:

我会查看将产品添加到购物车的代码,验证看起来正确,模型定义了业务规则,对象之间的关系(控制器定义的每个对象在数据库中都有一个表(行)) .

如果您的代码的一部分在保存另一个对象(表行条目)之前删除了一个对象(表行),这将破坏数据库中的关系,这也显示为验证错误,在我的情况下,我正在执行在订单保存命令之后在其自己的救援块中进行收费(此部分的第一部分删除了购物车对象),条带收费代码行指示何时保存订单,这是在保存订单的代码行之后,这会导致错误“无效的订单项”,一旦将费用代码放在@order.save 之前并在单个开始救援块内,订单保存时不会出现错误[链接]rails 4 stripe payment causing line item invalid error

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-03
    • 2010-11-30
    相关资源
    最近更新 更多