0

这里的第二个问题,我真的很想自己解决这个问题,但我只是不知道从哪里开始调试它。

所以这是我在浏览器中的错误(当我去结账并在 order/_form.html.erb 中输入我的详细信息时发生)

OrdersController 中的参数错误#new

您需要提供至少一项验证

Rails.root:C:/Users/Ruby/rails_practice/depot4 应用程序跟踪 | 框架跟踪 | 全跟踪

app/models/payment_type.rb:6:in <class:PaymentType>' app/models/payment_type.rb:1:in' app/models/order.rb:7:in <class:Order>' app/models/order.rb:1:in' app/controllers/orders_controller.rb:1:in `'

这是我在 OrdersController 中的新定义:

def new
  @cart = current_cart
  if @cart.line_items.empty?
    redirect_to store_url, :notice => "Your cart is empty"
    return
  end

  @hide_checkout_button = true
  @order = Order.new

  respond_to do |format|
    format.html # new.html.erb
    format.json { render json: @order }
  end
end

问题是我没有接触 def new,我一直在做 def create,这里是:

def create
  @order = Order.new(params[:order])
  @order.add_line_items_from_cart(current_cart)
  @cart = current_cart
  @hide_checkout_button = true
  pay_type = PaymentType.find( :conditions => ['pay_type = ?', @order.pay_type] )
  @order.payment_type_id = pay_type.id

  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 json: @order, status: :created, location: @order }
    else
      format.html { render action: "new" }
      format.json { render json: @order.errors, status: :unprocessable_entity }
    end
  end
end

我正在尝试做的是创建一个订单,该订单是哪个belongs_to购物车payment_typehas_many line_items哪个belongs_to购物车。

hide_checkout_button顺便说一句,当我在订单页面上时,我也在尝试使用实例变量。

Orders 表有一个表的外键,PaymentTypes我试图从这个PaymentTypes表中找到payment_type用户提交的正确 id。

如果我注释掉这两行:

pay_type = PaymentType.find( :conditions => ['pay_type = ?', @order.pay_type] )
@order.payment_type_id = pay_type.id

有时我会得到一个不同的错误:

OrdersController 中的 NoMethodError#new

未定义的方法“键?” 对于零:NilClass

我认为这与浏览器中的缓存不正确有关,但我不确定连接是什么。

我将在我第一次发布后更新其余部分


部分双人

我知道这是关于验证,但我看不出我做错了什么...... order.rb:

class Order < ActiveRecord::Base
  attr_accessible :address, :email, :name, :pay_type, :payment_type_id, :cart_id, 
  :product_id

  has_many :line_items, :dependent => :destroy
  belongs_to :payment_type

  PAYMENT_TYPES = PaymentType.pluck(:pay_type)

  validates :name, :address, :email, :pay_type, :presence => true
  validates :pay_type, :inclusion => PAYMENT_TYPES

然后你得到了另一belongs_topayment_type.rb

class PaymentType < ActiveRecord::Base
  attr_accessible :pay_type

  has_many :orders

  validates ***:pay_type,*** :uniqueness
end

我知道我完全只是混淆了一些事情,但是我在功能测试中有一个失败,还有一个与更新订单有关的错误,但我还不知道是什么。我将研究它们,看看是否通过解决它们我无意中解决了这个奇怪的错误。

如果有人可以给我有关在 Rails 中进行黑客攻击和调试的提示,那就太好了。我希望能够在不在这里输入所有内容的情况下解决这个问题。

在这种情况下,我认为服务器跟踪不会提供比浏览器窗口更多的信息,但如果您需要它,或者有其他问题,请询问。

更新:

所以我的问题是我知道如何使用 payment_type.rb 中的全局变量来解决它,但这意味着我在 Orders 表中有一列支付类型,在另一列中有另一列名称和 payment_type_ids,这是外键.

由于我有外键,因此我不需要 Orders 表中的 payment_types 特定列。我应该能够在 Orders 视图中看到 PaymentType 表中的值。

如果没有全局变量,你如何做到这一点?

更新双人:

好的,所以我以前从未发布过这个(来自 orders_form.html.erb):

26:   <div class="field">
27:     <%= f.label :pay_type %><br />
28:     <%= f.select :pay_type, PaymentType::PAYMENT_TYPES,
29:                      :prompt => 'Select a payment method' %>
30:   </div>
31:   <div class="actions">

因此,我尝试在 Orders 中选择 :pay_type,但在 PaymentTypes 中给出了来自 :pay_type 的选项。

我无法想象这很重要吗?似乎是我的问题所在,但不能确定。

4

1 回答 1

0

我认为您的 validate 包含的语法是错误的。它应该是这样的:

验证 :pay_type, :inclusion => { :in => PAYMENT_TYPES }

于 2012-11-14T18:49:24.200 回答