2016-09-22 15 views
0

嗨,大家好,我正在嘗試「添加到購物車功能」。我一直收到「購物車未定義的方法或變量」的錯誤,我似乎無法弄清楚我哪裏出錯了。加入購物車功能 - 無方法錯誤(未定義方法)

這裏是我的cart.rb模型

class Cart < ActiveRecord::Base 
    has_many :tutors 

    def add_tutor(tutor_id) 
    tutor = Tutor.where('tutor_id = ?', tutor_id) 
    if tutor 
     Cart.tutors << tutor 
    end 
    save 
    end 
end 

這裏是我的carts_controller.rb在application_controller.rb

def current_cart 
    if session[:cart_id] 
     @current_cart ||= Cart.find(session[:cart_id]) 
    end 
    if session[:cart_id].nil? 
     @current_cart = Cart.create! 
     session[:cart_id] = @current_cart.id 
    end 
    @current_cart 
    end 

代碼中定義的routes.rb

class CartsController < ApplicationController 

    def show 
    @cart = current_cart 
    end 

    def add_to_cart 
    current_cart.add_tutor(params[:tutor_id]) 
    redirect_to tutors_path 
    end 

end 

方法按鈕

post '/add_to_cart/:tutor_id' => 'carts#add_to_cart', :as => 'add_to_cart' 

和按鈕的代碼添加到購物車

<%= button_to "Shortlist Tutor", add_to_cart_path(:tutor_id => :tutor_id), :method => :post %> 

每當我嘗試了「入圍導師」按鈕,我收到CartsController#add_to_cart一個NoMethodError,未定義的方法'導師的購物車(ID:整數):類

和突出顯示的錯誤是在cart.rb模型文件和線是

Cart.tutors << tutor 

任何幫助關於此錯誤是極大的讚賞。感謝您的時間和建議!

回答

0

Cart.tutors << tutor購物車是一個類。要將tutors添加到Cart,Cart必須是一個對象。在你的情況下,current_cart是一個對象,但Cart是類。所以用下圖所示替換cart.rb中的Cart

class Cart < ActiveRecord::Base 
    has_many :tutors 

    def add_tutor(tutor_id) 
    tutor = Tutor.where('tutor_id = ?', tutor_id) 
    if tutor 
     self.tutors << tutor 
    end 
    save 
    end 
end 
+0

錯誤是否得到解決? –

+0

非常感謝您的解決方案!是的,它似乎確實解決了我的問題,因爲我現在不再收到未定義的方法錯誤!再一次感謝你! 現在錯誤已成爲SQLite3 :: SQLException:沒有這樣的列:tutor_id:SELECT「tutors」。* FROM「tutors」WHERE(tutor_id ='2') – angkiki

+0

這是因爲你沒有在Tutor中有tutor_id列。所以用「tutor = Tutor.find(tutor_id)」代替「tutor = Tutor.where('tutor_id =?',tutor_id)」。現在,如果表示沒有找到記錄,那就意味着沒有導師記錄與id一起出現tutor_id –