这里的第二个问题,我真的很想自己解决这个问题,但我只是不知道从哪里开始调试它。
所以这是我在浏览器中的错误(当我去结账并在 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_type
和has_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_to
面payment_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 的选项。
我无法想象这很重要吗?似乎是我的问题所在,但不能确定。