2011-03-25 36 views
0

嗨 我得到了一個模型類別和另一個模型產品。有關係 - has_and_belongs_to_many。Ruby On Rails 3 - 取得零例外,並不明白爲什麼

當我打開控制檯並鍵入Category.first.products時,我收到附帶該類別產品的列表。

但是,當我嘗試生成與顯示模型的XML文件,我得到:

undefined method `type' for nil:NilClass 

我測試過下面的代碼上的其他車型我做了的has_many關係和它的作品怎麼樣我希望它能夠工作。但不會與這種關係一起工作,也許它沒有任何與此有關的東西?

def show 

@categories = Category.find(params[:id]) 

@products = @categories.products 

respond_to do |format| 
    format.html # index.html.erb 
    format.xml { render :xml => @products } 
    format.json { render :json => @products } 
end 

我是新來這個,你可以看到...

+0

在哪一行發生此錯誤? – 2011-03-25 10:25:06

+0

app/controllers/finder_controller.rb:28:在'block(2 levels)in show' – Philip 2011-03-25 10:29:12

+0

請提及哪行代碼產生錯誤。我不知道哪一行是第28行。檢查你的代碼文件'finder_controller.rb'並告訴我什麼是行28上寫的。 – 2011-03-25 10:39:54

回答

1

感謝您的回覆,我繼續調查並對控制器進行了實驗,並試用了。 @ category.products。 全部,它的工作。可悲的是,我不知道它爲什麼這樣做...特別是當它在控制檯中對我有用時...但是我想我很高興能以某種方式解決問題......

def show 
@category = Category.find(params[:id]) 

@products = @category.products.all 

respond_to do |format| 
    format.html # show.html.erb 
    format.xml { render :xml => @products } 
end 

但我會使用日誌和終端採集器,當我調試比以前更多!感謝您的提示!

0

在這種情況下,它看起來像你的問題是由一些奇怪的(可能不一致)數據引起的。嘗試查看(在您的控制檯中)導致問題的對象 - 在您的控制器中使用了一些特定的ID。檢查Category.find(THIS_IS).products.to_xml是否也發生錯誤。

檢查單個產品是否能夠響應.to_xml返回有用的內容。

你會經常遇到類似的問題。你應該學習如何調試它們。

首先要看回溯。您可能會在您的Web瀏覽器中看到它,但所有異常通常也都放在您的日誌/ development.log中(取決於環境)。

在開發日誌中,您會看到SQL查詢在出現錯誤之前運行。有時他們可能會幫助你找到問題所在。在這種情況下,您可以檢查錯誤發生之前選擇哪種類型的模型。 (這只是一個線索,而不是一個解決方案)

在回溯中,您會看到您編輯的文件。通常這個錯誤將會出現在你的代碼中。如果你的代碼看起來不錯,你可能想看看backtrace中提到的其他文件。閱讀Rails的代碼可能會給你一些線索。有時。

還有一個問題:您是否在模型中混淆了一個名爲'type'的屬性?如果是,則嘗試將此屬性重命名爲其他內容。

我們不能給你更準確的答案。我希望你會發現這個問題。另外,在開始修復錯誤之前,請嘗試爲此編寫一個單元測試:檢查在測試數據庫中的某個模型上調用.to_xml是否引發異常。

+0

感謝您的提示,在下面發佈了一個解決方案! – Philip 2011-03-25 14:41:32