【发布时间】:2012-11-14 18:35:03
【问题描述】:
这里的第二个问题,我真的很想自己解决这个问题,但我不知道从哪里开始调试它。
所以这是我在浏览器中的错误(当我去结帐并按顺序输入我的详细信息时发生)/_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
未定义的方法`key?'对于 nil: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
然后你在payment_type.rb 中得到了belongs_to 的另一面
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 的选项。
我无法想象这很重要吗?似乎是我的问题所在,但不能确定。
【问题讨论】:
-
app/models/payment_type.rb:6:in <class:PaymentType>'表示错误首先在这里提出,所以您可以将您的 PaymentType 模型添加到您的帖子中吗? -
我也不确定您是否可以在控制器中使用
new操作,它可能是保留字。 -
请出示您的
payment_type.rb和order.rb -
为快速响应的家伙干杯,有什么想法吗?
-
好的,错误是因为您没有设置验证 PaymenType 中的属性,您希望哪个属性是唯一的?
标签: ruby-on-rails arrays validation nomethoderror