表years
包括以下字段:id
,name
。我有一個錯誤:對於nil:NilClass和undefined方法`name'的未定義方法:nil:NilClass
表course
包括:id
,
表year_courses
包括:year_id
和course_id
。
我收到異常:
undefined method `name' for nil:NilClass and undefined method `id' for nil:NilClass
表years
包括以下字段:id
,name
。我有一個錯誤:對於nil:NilClass和undefined方法`name'的未定義方法:nil:NilClass
表course
包括:id
,
表year_courses
包括:year_id
和course_id
。
我收到異常:
undefined method `name' for nil:NilClass and undefined method `id' for nil:NilClass
這是因爲發生了一些您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?
。
非常感謝! – user3598579
理想情況下,嘗試不應該是必要的。如果這是解決方案,則建模有問題。 –
我同意@MarkThomas在這種情況下造型不理想 - 但對於OP所要求的純粹的解決方案而言,這將起作用。然而,我會仔細檢查一下這個數據模型,看看有沒有辦法可以避免用這種方式編寫你的視圖。 – derekyau
解決零的另一種方法:NilClass錯誤是轉儲數據(這就是如果您的應用程序正在使用您正在試驗的虛擬數據),則使用所有必要的屬性重新設置數據。 rake db:reset
。或rake db:drop
然後rake db:seed
你能在控制檯中做到這一點嗎? –
第一行應該是'<%= content_tag_for:tr,@ year_courses.each do | yc | %>' –
嗯,如果你對HABTM使用Rails標準約定,你的連接表將是'courses_years'。看起來你正在做一些奇怪的事情,而且我認爲這可能是你的問題的一個因素。 –