首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用rails 4进行敏捷Web开发-签出-行项目无效

使用rails 4进行敏捷Web开发-签出-行项目无效
EN

Stack Overflow用户
提问于 2014-11-18 05:36:03
回答 2查看 320关注 0票数 0

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

我向控制器添加了操作,并为模型的实例变量添加了方法。一切都在按预期进行,...在一定程度上。

当我插入name、address、emailaddress和pay type等值时,我收到一个错误通知,说“项目无效”。

一些验证测试可能写错了。有谁知道哪里会出问题吗?

代码语言:javascript
复制
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

控制器

代码语言:javascript
复制
  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

固定装置

代码语言:javascript
复制
 one:
  product_id: ruby
  cart_id: one

 two:
  product_id: ruby
 cart_id: one

这是我的github帐户https://github.com/KerstinKee/depot

EN

回答 2

Stack Overflow用户

发布于 2014-11-18 06:19:40

您有两个验证。如果您真的传递了姓名、地址和电子邮件,则第二次验证将失败。

代码语言:javascript
复制
validates :pay_type, inclusion: PAYMENT_TYPES

你会选择什么pay_type?

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

代码语言:javascript
复制
object.errors.messages

祝好运!

票数 0
EN

Stack Overflow用户

发布于 2015-06-16 05:03:52

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

如果您的代码的一部分在另一个对象(表行条目)被保存之前删除了另一个对象(表行),这将破坏数据库中的关系,这也是一个验证错误,在我的例子中,我在order save命令之后在它自己的救援块中执行了一个费用(这个命令的第一部分删除了cart对象),代码的条带费用行指示了订单保存的时间,这导致了错误"invalid line items",一旦将收费代码放在@order.save之前,并在单个begin救援块中保存订单,就不会出现错误link

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26982415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档