第二個問題在這裏,我真的想自己解決這個問題,但我不知道從哪裏開始調試它。OrdersController中的Rails ArgumentError#new validation
所以這是我在瀏覽器錯誤
ArgumentError in OrdersController#new
You need to supply at least one validation
Rails.root: C:/Users/Ruby/rails_practice/depot4 Application Trace | Framework Trace | Full Trace
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 `'
和(當我去看看,爲了/ _form.html.erb進入我的個人信息發生)這是我的新高清在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 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
與一個實例變量,當我在訂單頁面上。
訂單表具有PaymentTypes
表的外鍵,我試圖從此PaymentTypes
表中找到用戶提交的payment_type
的正確標識。
如果我註釋掉這兩條線:
pay_type = PaymentType.find(:conditions => ['pay_type = ?', @order.pay_type])
@order.payment_type_id = pay_type.id
有時我得到一個不同的錯誤:
NoMethodError in OrdersController#new
undefined method `key?' for 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
然後,你已經得到了belongs_to
的另一側payment_type.rb
class PaymentType < ActiveRecord::Base
attr_accessible :pay_type
has_many :orders
validates ***:pay_type,*** :uniqueness
end
我知道,我完全只是令人困惑的事情,但我在函測試和有事情做與更新的順序一個錯誤一個失敗,但我還不知道是什麼。我會去研究他們,看看如果解決它們,我會無意中解決這個奇怪的錯誤。
如果任何人都可以給我關於黑客入侵和調試的提示,那就太棒了。我希望能夠解決這個問題,而不用在這裏輸入所有這些。
我不認爲在這種情況下服務器跟蹤比瀏覽器窗口提供更多的信息,但如果你需要它或其他任何東西,請詢問。
UPDATE:
所以我的問題是,我知道如何在payment_type.rb一個全局變量解決這個問題,但是這意味着我必須在Orders表支付類型的一列和另一名和另一列中的payment_type_ids是外鍵。
因爲我有外鍵我不應該需要Orders表中的payment_types的特定列。我應該能夠在Orders視圖中看到PaymentType表的值。
如何在沒有全局變量的情況下執行此操作?
UPDATE德塞夫勒:
好了,我以前從未張貼了這個(從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">
所以我試着選擇:在訂單pay_type但給出的選項來自:PaymentTypes中的pay_type。
我無法想象這件事嗎?似乎是我的問題所在,但無法確定。
'應用/模型/ payment_type.rb:6:在<類:PaymentType>」'表示錯誤這是第一次在這裏提出的,所以你可以將你的PaymentType模型添加到你的post pleasE嗎? – MrYoshiji
另外林不知道你可以在控制器中有一個'new'動作,它可能是一個保留字。 – MrYoshiji
請顯示您的'payment_type.rb'和'order.rb' – Thanh