2013-08-05 64 views
2

所以我有一個DB關係,用戶有一個PreferenceList。我已經在數據庫表中設置了preference_list_id,並且我已經建立了與PreferenceList的關係,並且與用戶建立了has_one :preference_list關係。has_one沒有更新屬性ID?

這是奇怪的部分。如果我的電子郵件地址爲user.preference_list = preference_list,則可以訪問user.preference_list,它會爲我提供preference_list的正確實例。然而,如果我做user.preference_list_id(一個有效的列,我已經檢查過),即使我已經將preference_list添加到user.preference_list後,它也不會提供任何內容。我需要爲各種數據庫操作更新id。我究竟做錯了什麼?

+2

您是否在添加首選項列表後保存用戶? – Doon

+0

是的。我試着調用user.save和user.reload無濟於事。 – user1427661

+0

查看日誌。它應該顯示正在保存的關聯對象,除非有某種驗證失敗? – Doon

回答

2

外鍵用於聲明belongs_to關聯的類。所以,如果你有

class PreferenceList < ActiveRecord::Base 
    belongs_to :user 
end 

class User < ActiveRecord::Base 
    has_one :preference_list 
end 

preferences_lists應該有user_id列。 Rails將正確處理這些列。您也可以將preference_list_id列添加到users表中。但是這個列沒有什麼特別的含義,Rails在默認情況下不會執行任何操作。如果您確實需要操作preference_list_id,請嘗試更改belongs_to/has_one方面。或使用user.preference_list.id