2012-11-14 71 views
0

第二個問題在這裏,我真的想自己解決這個問題,但我不知道從哪裏開始調試它。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_typehas_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。

我無法想象這件事嗎?似乎是我的問題所在,但無法確定。

+0

'應用/模型/ payment_type.rb:6:在<類:PaymentType>」'表示錯誤這是第一次在這裏提出的,所以你可以將你的PaymentType模型添加到你的post pleasE嗎? – MrYoshiji

+0

另外林不知道你可以在控制器中有一個'new'動作,它可能是一個保留字。 – MrYoshiji

+0

請顯示您的'payment_type.rb'和'order.rb' – Thanh

回答

0

我認爲你的驗證包含的語法是錯誤的。應該是這樣的:

驗證:pay_type,:夾雜=> {:在=> PAYMENT_TYPES}

+0

乾杯保羅,雖然似乎沒有做任何事情 –

相關問題