2014-05-05 27 views
0

years包括以下字段:id,name我有一個錯誤:對於nil:NilClass和undefined方法`name'的未定義方法:nil:NilClass

course包括:id

year_courses包括:year_idcourse_id

我收到異常:

undefined method `name' for nil:NilClass and undefined method `id' for nil:NilClass 
+0

你能在控制檯中做到這一點嗎? –

+0

第一行應該是'<%= content_tag_for:tr,@ year_courses.each do | yc | %>' –

+0

嗯,如果你對HABTM使用Rails標準約定,你的連接表將是'courses_years'。看起來你正在做一些奇怪的事情,而且我認爲這可能是你的問題的一個因素。 –

回答

2

這是因爲發生了一些您YearCourse(YC)的對象,他們沒有來,而一些不具備的課程,所以當鐵軌試圖調用.name上一個已經爲零的值yc.year你最終會遇到'nilnil class'錯誤。你有的其他錯誤是完全一樣的,除了它的當然。

爲了解決這個特別,你可以嘗試以下方法:

<%= content_tag_for :tr, @year_courses do |yc| %> 

     <%= yc.year.try(:name) %></div> 
     <%= yc.course.try(:id) %></div> 

<% end %> 

。嘗試將「嘗試」來調用該方法,如果失敗也不會引發錯誤。這就是說,通常在rails編碼中,過度使用try方法會導致很多不良的編碼習慣。它也可以表示一種代碼異味,指出其可能的建模可能以更好的方式完成。否則,在嘗試分別調用.name.id之前,可以始終檢查yc.year.present?yc.course.present?

+0

非常感謝! – user3598579

+0

理想情況下,嘗試不應該是必要的。如果這是解決方案,則建模有問題。 –

+0

我同意@MarkThomas在這種情況下造型不理想 - 但對於OP所要求的純粹的解決方案而言,這將起作用。然而,我會仔細檢查一下這個數據模型,看看有沒有辦法可以避免用這種方式編寫你的視圖。 – derekyau

0

解決零的另一種方法:NilClass錯誤是轉儲數據(這就是如果您的應用程序正在使用您正在試驗的虛擬數據),則使用所有必要的屬性重新設置數據。 rake db:reset。或rake db:drop然後rake db:seed

相關問題