0

我試圖刪除,而不是銷燬(這也不起作用),記錄作爲Rails的學習練習。NoMethodError,ActiveRecord 4.0

在rails控制檯中,我執行:subject.pages.delete(second_page),我得到下面的錯誤信息(與嘗試銷燬相同)。

NoMethodError: undefined method `name' for nil:NilClass

在subject.pages是:

=> #<ActiveRecord::Associations::CollectionProxy [#<Page id: 2, subject_id: 1, name: "First Page", permalink: "first", position: 1, visible: false, created_at: "2016-08-19 17:58:02", updated_at: "2016-08-19 17:58:02">, #<Page id: 3, subject_id: 1, name: "Second Page", permalink: "second", position: 2, visible: false, created_at: "2016-08-19 17:59:07", updated_at: "2016-08-19 17:59:07">]>

主題有一個與頁面中的關係。頁面belongs_to主題。

Ed1:它看起來像'second_page'是一個局部變量。所以當我退出Rails控制檯時。我無法重新創建問題,但我仍然無法刪除此記錄。 Edd2:所以,我決定繼續學習,直到我用ERB呼叫subject.pages.size,我纔沒有遇到任何打嗝。再次,我得到了一個'NoMethodError',html.erb文件不會呈現。我應該在哪裏檢查以確保我正確地聲明頁面?我仔細檢查了老師的代碼,它看起來都是一樣的(我可能會錯過一些小問題),但我迷失於如何在我的應用程序中修復這個錯誤。

Ed3(最後):我刪除了創建的表並重新開始。我不確定實際的解決方案是什麼,但我認爲改變控制器中的關係確實有幫助。感謝您的幫助。

使用:Rails的4.0.0,4.0.0的ActiveRecord,MySQL的14年5月17日(如果需要更多信息,我會及時更新)

回答

0

回答刪除記錄的初始問題。

我無法使用subject.pages.delete(second_page)刪除此記錄,但我可以使用Page.find(3).delete刪除它。

回答有關NoMethodError的問題。

This評論是發現此問題最有洞察力的。也就是說,因爲我使用的是Rails 4.0.0,所以會出現問題和錯誤。一個常見的問題是NoMethodError。我升級到4.1.2,通過更新我的Gemfile然後在我的應用程序的根目錄中更新bundle install。然後我重新啓動了Rails服務器,我沒有任何問題。 subject.pages.size能夠渲染。

0

您使用的是依賴刪除(銷燬)選擇一個白衣has_many關聯,這是無法完成的。此選項僅適用於belongs_to關聯。

我希望我能幫你解決!

+0

我很抱歉。頁面屬於_主題。但我仍然有問題。 –

1

按照APIdockdelete(*records)

For has_many associations, the deletion is done according to the strategy specified by the :dependent option.[...] If no :dependent option is given, then it will follow the default strategy. The default strategy is :nullify. This sets the foreign keys to NULL.

這意味着該記錄不被破壞,只有聯想。 必須將相關選項設置爲:destroy才能從數據庫中刪除記錄。

class Subject < ActiveRecord::Base 
    has_many :pages, dependent: :destroy 
end 
相關問題